我正在使用 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/