我在哪里可以声明我的 NSMenu 触发器?
Where can I declare my trigger for NSMenu?
我在 AppDelegate 中手动创建了一个 NSMenu,如下所示:
class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
rightClickMenu = RightClickMenu.createMenu();
}
而且我想将我的 NSMenu 的所有触发器保留在一个单独的 Class 中,就像这样:
class RightClickMenu {
static func createMenu() -> NSMenu {
let menu = NSMenu(title: "Status Bar Menu")
menu.addItem(
withTitle: "Test",
action: #selector(RightClickMenu.test(_:)),
keyEquivalent: "")
return menu
}
//This func never gets triggered and menu item is grey
@objc func test(_ sender: Any?){
print("Test")
}
}
我觉得跟函数声明的位置有关系。至少我知道它在 AppDelegate 中有效,但为什么在这里不起作用?根本找不到解释这个生命周期的好资源...
我来自 SwiftUI 背景,我是 Swift 的新手,学习它所基于的所有这些旧技术有点挑战。希望你能帮助我。
这是它的样子:
您将选择器中的方法表示为静态函数(通过在 class 上引用它)。改成
action: #selector(test(_:))
你可以试试
let eventHud = RightClickMenu()
class RightClickMenu {
static func createMenu() -> NSMenu {
let menu = NSMenu(title: "Status Bar Menu")
let item = NSMenuItem(title: "Test", action: #selector(RightClickMenu.test(_:)), keyEquivalent: "")
item.target = eventHud
menu.addItem(item)
return menu
}
@objc func test(_ sender: Any?){
print("Test")
}
}
因为RightClickMenu
只是某样板,
最好修改为
extension NSMenu{
static func createMenu() -> NSMenu {
let menu = NSMenu(title: "Status Bar Menu")
let item = NSMenuItem(title: "Test", action: #selector(NSMenu.test(_:)), keyEquivalent: "")
item.target = menu
menu.addItem(item)
return menu
}
@objc func test(_ sender: Any?){
print("Test")
}
}
我对此的回答是使用带有 AppDelegate 的 SwiftUI 默认项目中的故事板 NSMenu。这很完美,所以我推荐这个作为解决方案。
我在 AppDelegate 中手动创建了一个 NSMenu,如下所示:
class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
rightClickMenu = RightClickMenu.createMenu();
}
而且我想将我的 NSMenu 的所有触发器保留在一个单独的 Class 中,就像这样:
class RightClickMenu {
static func createMenu() -> NSMenu {
let menu = NSMenu(title: "Status Bar Menu")
menu.addItem(
withTitle: "Test",
action: #selector(RightClickMenu.test(_:)),
keyEquivalent: "")
return menu
}
//This func never gets triggered and menu item is grey
@objc func test(_ sender: Any?){
print("Test")
}
}
我觉得跟函数声明的位置有关系。至少我知道它在 AppDelegate 中有效,但为什么在这里不起作用?根本找不到解释这个生命周期的好资源...
我来自 SwiftUI 背景,我是 Swift 的新手,学习它所基于的所有这些旧技术有点挑战。希望你能帮助我。
这是它的样子:
您将选择器中的方法表示为静态函数(通过在 class 上引用它)。改成
action: #selector(test(_:))
你可以试试
let eventHud = RightClickMenu()
class RightClickMenu {
static func createMenu() -> NSMenu {
let menu = NSMenu(title: "Status Bar Menu")
let item = NSMenuItem(title: "Test", action: #selector(RightClickMenu.test(_:)), keyEquivalent: "")
item.target = eventHud
menu.addItem(item)
return menu
}
@objc func test(_ sender: Any?){
print("Test")
}
}
因为RightClickMenu
只是某样板,
最好修改为
extension NSMenu{
static func createMenu() -> NSMenu {
let menu = NSMenu(title: "Status Bar Menu")
let item = NSMenuItem(title: "Test", action: #selector(NSMenu.test(_:)), keyEquivalent: "")
item.target = menu
menu.addItem(item)
return menu
}
@objc func test(_ sender: Any?){
print("Test")
}
}
我对此的回答是使用带有 AppDelegate 的 SwiftUI 默认项目中的故事板 NSMenu。这很完美,所以我推荐这个作为解决方案。