我正在制作一个SwiftUI应用,我想使用菜单栏添加键盘快捷键。
我已经看过苹果的视频SwiftUI on all devices,但是我不知道他们是如何将menu.xib
集成到他们的应用程序中的。
#if targetEnvironment(macCatalyst)
// MacOS
#else
// iOS
#endif
也不起作用。 我试图将菜单栏添加到我的项目中,但是无法编译。您是否知道如何添加一个?
答案 0 :(得分:0)
但是我不知道他们如何将menu.xib集成到他们的应用程序中。
我认为(我没有看过视频)他们确实在Mac上本地实现了SwiftUI,这意味着他们没有使用Catalyst。
我也遇到了完全相同的问题,我通过在AppDelegate中添加一个菜单项来“解决”该问题,然后将通知发送给对该动作感兴趣的视图。这不理想,但是可以。
我使用空格键实现了一个播放动作,它的一部分看起来像这样:
UIKeyCommand(input: " ", modifierFlags: [], action: #selector(togglePlay))
有关更多信息,请参见UIMenuBuilder
文档。
答案 1 :(得分:0)
您可以在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])
}
答案 2 :(得分:0)
在SwiftUI 2.0(在BigSur Beta3上)中,您可以像这样将Menue轻松添加到Mac App:
@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")
}
}
}
}