SwiftUI 如何在 UIBarButtonItem 上添加动作?

3
我正在使用SwiftUI,我在NavigationBar中添加了Button,但是我无法为该按钮设置动作。我尝试了以下两种方法,但均失败。
方法一:
.navigationBarTitle("\(task.label)")
.navigationBarItems(trailing: UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.actionName)))

但是我在这里遇到了一个错误

参数类型 'UIBarButtonItem' 与预期类型 'View' 不符合

方法2:

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

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

在这里,尽管“完成”按钮显示在导航栏的右侧,但该打印语句从未运行,但操作也从未生效。

1个回答

1
上面的代码明显是错误的 - 你试图传递 UIKit 对象而不是期望的 View struct。
下面的代码肯定可以正常工作(在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`.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接