繁体   English   中英

NSStatusItem 菜单操作未触发

[英]NSStatusItem menu Action not firing

NSStatusItem菜单显示正确,但当我单击菜单时,操作不会触发。

由于该应用程序与 Mac Catalyst 兼容,我创建了框架,然后将框架传递给主应用程序以显示NSStatusItem的菜单,它可以正常工作,但我遇到了菜单操作不工作的问题。

这是我的代码:

@objc class AppKitController: NSObject {
    var statusBarItem: StatusBarItemControler!

    override init() {
        super.init()
        
        print("[AppKitController] Loaded successfully")
        self.statusBarItem = StatusBarItemControler()
        self.statusBarItem.updateTitle()
        self.statusBarItem.updateMenu()
    }
}

class StatusBarItemControler {
    let item: NSStatusItem

    init() {
        self.item = NSStatusBar.system.statusItem(
            withLength: NSStatusItem.variableLength
        )
        let statusBarMenu = NSMenu(title: "APPMenu")
        self.item.menu = statusBarMenu
        
    }

    func updateTitle() {
        let title = "AppMenu"
        print("Update title")

        DispatchQueue.main.async {
            if let button = self.item.button {
                button.title = "\(title)"
                button.target = self
                
            }
        }
    }

    func updateMenu() {
        if let statusBarMenu = self.item.menu {
            statusBarMenu.autoenablesItems = false
            statusBarMenu.removeAllItems()
            
            statusBarMenu.addItem(NSMenuItem.separator())
            statusBarMenu.addItem(NSMenuItem.separator())
            self.createPreferencesSection()
        }
    }

    func createPreferencesSection() {
        self.item.menu!.addItem(
            withTitle: "Open",
            action: #selector(openPrefecencesWindow),
            keyEquivalent: ",")
        self.item.menu!.addItem(
            withTitle: "Quit",
            action: #selector(quit),
            keyEquivalent: "q")
    }
    
    
    @objc func openPrefecencesWindow(_: NSStatusBarButton?) {
        print("Open preferences window")
    
        }
    
    @objc func quit(_: NSStatusBarButton?) {
        print("Open preferences window")
        }

}

谢谢@Alexander,我找到了解决方案并且有效。

 class AppKitController: NSObject,NSApplicationDelegate,NSWindowDelegate {
 
     
     let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
     
     override init() {
         super.init()
         
         NSApplication.shared.delegate = self
         NSApplication.shared.mainWindow?.delegate = self
         statusItem.button?.title = "Your_App_Name"
         
         statusItem.menu = createMenu()
         print("[AppKitController] Loaded successfully")
       
     }
     
     func createMenu() -> NSMenu{
         let menu = NSMenu()
         let openMenuItem = menu.addItem(withTitle: "Open", action: #selector(openMenu), keyEquivalent: "")
         openMenuItem.target = self
         return menu
         
     }
 
     @objc func openMenu(_ sender:Any?){
         print("Open menu called")
         
     }
     func windowShouldClose(_ sender: NSWindow) -> Bool {
         print("Window should close")
         return false
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM