我正在尝试找到将NSMenuItem与macOS上的SwiftUI onCommand连接的最佳解决方案。
当前我正在执行以下操作:
@IBAction func changeColor(_ sender: Any) {
print("Dummy Function")
}
使用Main.storyboard中的First Responder函数创建并连接NSMenuItem。
将所需的代码添加到我的SwiftUI视图
struct TestView: View {
let changeColor = #selector(AppDelegate.changeColor(_:))
var body: some View {
VStack {
TextField("Text", text: .constant(""))
Text("Hello World!")
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.onCommand(changeColor) {
print("Change Color Action")
}
}
}
如果之前是TextField是第一响应者,我将看到已打印“更改颜色操作”。 如果TextField之前不是First Responder,则View不会成为First Responder。也许这目前是Catalina Beta(19A558d)中的错误,因为我不太专注于工作。
答案 0 :(得分:2)
答案 1 :(得分:0)
我最终在AppDelegate中创建了一个PassthroughSubject
,并将其传递到我的SwiftUI视图,并在我的SwiftUI视图所拥有的模型对象中进行了订阅。调用菜单命令的AppDelegate选择器时,我使用PassthroughSubject
发送事件,我的模型接收并处理了该事件。
我的回答肯定不是理想的,我很想知道您是否找到了一种更好的方法。