ios - SwiftUI 如何在 UIBarButtonItem 上添加操作?

标签 ios swift uinavigationbar swiftui uinavigationitem

我正在使用 SwiftUI 并且我在 NavigationBar 中添加了 Button 但我无法在该按钮上设置操作。我尝试了这两种方法但都失败了。

方法:1

.navigationBarTitle("\(task.label)")
.navigationBarItems(trailing: UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.actionName)))

但是我这里有这个错误

Argument type 'UIBarButtonItem' does not conform to expected type 'View'

方法:2

.navigationBarTitle("\(task.label)")
.navigationBarItems(trailing: NavigationBarButtonItem())

struct NavigationBarButtonItem : View {
    var body : some View {
        Button(action: {
            print("Button Tapped")
        }, label: {Text("Done")})
    }
}

在这里,尽管“完成”按钮显示在 NavigationBar 的右侧,但此打印语句从未运行,但操作从未起作用。

最佳答案

.navigationBarItems(trailing: UIBarButtonItem(...

以上肯定是不正确的——你试图传递 UIKit 对象而不是预期的 View 结构

下面的绝对有效(使用 Xcode 11.2+ 测试)

NavigationView {
    // ... some view is here
    .navigationBarItems(trailing: Button("Done") { 
       print("Done something")
    })
}

好吧,“按原样”复制粘贴您来自方法 2 的代码也能正常工作,所以可能原因不在这段代码中。

它没有提供你所有的代码,但我可以假设你把它放在外面 NavigationView,但是文档说:

/// This modifier only takes effect when this view is inside of and visible
/// within a `NavigationView`.

关于ios - SwiftUI 如何在 UIBarButtonItem 上添加操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004679/

相关文章:

iOS 重绘图像以防止延迟解压导致图像变大

swift - AudioQueueStart 但没有声音

ios - 在 objective-c 中更改导航状态栏文本颜色时出错

iOS 6 : [self. tableview 重新加载数据] 禁用滚动?

ios - 在键入另一个字符之前,空格字符不会显示在 TextView 中

ios - Swift - UIViewController 内的 UITableView,不调用 UITableView 函数

ios - 动画时无法点击注释

ios - 如何将图像放在 UIViewController 的导航栏中心?

ios - 在 UINavigationController 堆栈中仅隐藏一个 UIViewController 的导航栏和状态栏

ios - 在 Vimeo 上上传视频时出现问题(通过我的 iOS 应用程序)