首页 > 解决方案 > SwiftUI 如何在 UIBarButtonItem 上添加操作?

问题描述

我正在使用 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")})
    }
}

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

标签: iosswiftuinavigationbarswiftuiuinavigationitem

解决方案


.navigationBarItems(尾随:UIBarButtonItem(...

以上绝对是不正确的-您尝试传递 UIKit 对象而不是预期的 View 结构

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

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

好吧,“按原样”复制粘贴方法 2中的代码也可以,所以可能原因不在此代码中。

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

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

推荐阅读