Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI中的键盘快捷键_Swift_Macos_Swiftui - Fatal编程技术网

SwiftUI中的键盘快捷键

SwiftUI中的键盘快捷键,swift,macos,swiftui,Swift,Macos,Swiftui,我正在制作一个SwiftUI应用程序,我想使用菜单栏添加键盘快捷键。 我已经看过苹果的视频,但我不知道他们是如何将菜单.xib集成到他们的应用程序中的 #如果目标环境(macCatalyst) //马科斯 #否则 //iOS #恩迪夫 不太管用。 我试图向项目中添加菜单栏,但无法编译。你知道怎么加一个吗 但我不明白他们是如何将menu.xib集成到他们的应用程序中的 我想(我没有看过视频)他们确实在mac上实现了SwiftUI,这意味着他们没有使用Catalyst 我还面临着完全相同的问题,我

我正在制作一个SwiftUI应用程序,我想使用菜单栏添加键盘快捷键。 我已经看过苹果的视频,但我不知道他们是如何将
菜单.xib
集成到他们的应用程序中的

#如果目标环境(macCatalyst)
//马科斯
#否则
//iOS
#恩迪夫
不太管用。 我试图向项目中添加菜单栏,但无法编译。你知道怎么加一个吗

但我不明白他们是如何将menu.xib集成到他们的应用程序中的

我想(我没有看过视频)他们确实在mac上实现了SwiftUI,这意味着他们没有使用Catalyst

我还面临着完全相同的问题,我通过在AppDelegate中添加一个菜单项“解决”了这个问题,然后该菜单项会向对操作感兴趣的视图发送通知。这并不理想,但很有效

我使用空格键实现了一个播放动作,部分内容如下:
UIKeyCommand(输入:”,modifierFlags:[],操作:#选择器(togglePlay))


有关详细信息,请参阅UIMenuBuilder文档。

您可以覆盖AppDelegate中的buildMenu功能,并从中操作菜单栏。这将在无需Catalyst环境检查的情况下工作

override func buildMenu(with builder: UIMenuBuilder) {
    super.buildMenu(with: builder)

    builder.remove(menu: .services)
    builder.remove(menu: .format)
    builder.remove(menu: .toolbar)

    builder.insertChild(newTask(), atStartOfMenu: .file)
    builder.insertSibling(logout(), afterMenu: .about)
    builder.insertSibling(preferences(), afterMenu: .about)     
}
输入键示例:

func newTask() -> UIMenu {

        let command                  = UIKeyCommand(input: "n", modifierFlags: [.command], action: #selector(onNewTask))
        command.title                = "Menu_Title_New_Task".localized()
        command.discoverabilityTitle = command.title

        return UIMenu(title: command.title, image: nil, identifier: "your_identifier_here", options: .displayInline, children: [command])
    }
在SwiftUI 2.0(在BigSur Beta3上)中,您可以很容易地将这样的菜单添加到Mac应用程序中:

@main
struct AppWithMenue: App {
  var body: some Scene {
    WindowGroup {
      ContentView()      
    }
    .commands {
      MyCommands()
    }
  }
}

struct MyCommands : Commands{
  var body: some Commands {
    CommandMenu("MyCommands") {
      Section {
        Button("Command 1", action: {print ("Command 1")})
        .keyboardShortcut("1")
        Button("Command 2", action: {print ("Command 2")})
          .keyboardShortcut("2")
      }
    }
  }
}

请分享有问题的代码。