【问题标题】:SwiftUI How to add action on UIBarButtonItem?SwiftUI 如何在 UIBarButtonItem 上添加操作?
【发布时间】:2020-05-17 04:04:31
【问题描述】:

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

方法:1

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

但是我这里有这个错误

参数类型“UIBarButtonItem”不符合预期类型 '查看'

方法:2

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

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

在这里,这个打印语句永远不会运行,虽然“完成”按钮显示在 NavigationBar 的右侧,但操作永远不会起作用。

【问题讨论】:

    标签: ios swift uinavigationbar swiftui uinavigationitem


    【解决方案1】:

    .navigationBarItems(尾随: 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`.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      相关资源
      最近更新 更多