gpt4 book ai didi

SwiftUI - 如何在 macOS 上将 onCommand 与 NSMenuItem 一起使用

转载 作者:行者123 更新时间:2023-12-02 11:16:59 28 4
gpt4 key购买 nike

我正在尝试找到在 macOS 上将 NSMenuItem 与 SwiftUI onCommand 连接的最佳解决方案。

目前我正在做以下事情:

  • 在 AppDelegate 中,我创建了一个虚拟函数,以便能够列出函数 First Responder 接收到的操作列表。
  • @IBAction func changeColor(_ sender: Any) {
    print("Dummy Function")
    }
  • 使用 Main.storyboard 中的 First Responder 函数创建并连接一个 NSMenuItem。
  • 将所需的代码添加到我的 SwiftUI View
  • 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 之前不是第一响应者,则 View 不会成为第一响应者。也许这目前是 Catalina Beta (19A558d) 中的一个错误,因为我也无法专注于工作。

    最佳答案

    通过首先制作 View focusable,我已经能够让它发挥作用:

    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)
    .focusable() // Add this
    .onCommand(changeColor) {
    print("Change Color Action")
    }
    }
    }

    那么您还必须选中“键盘系统首选项”中的“使用键盘导航在控件之间移动焦点”复选框

    enter image description here

    关于SwiftUI - 如何在 macOS 上将 onCommand 与 NSMenuItem 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049065/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com