Left vs Right Click Status Bar Item Mac Swift 2

前端 未结 2 2040
孤独总比滥情好
孤独总比滥情好 2020-12-16 14:02

I have been trying to develop a simple program that sits in the Mac\'s status bar. I need it so that if you left click, it runs a function, but if you right click it display

相关标签:
2条回答
  • 2020-12-16 14:41

    Swift 3

    let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength)
    
    if let button = statusItem.button {
        button.action = #selector(self.statusBarButtonClicked(sender:))
        button.sendAction(on: [.leftMouseUp, .rightMouseUp])
    }
    
    func statusBarButtonClicked(sender: NSStatusBarButton) {
        let event = NSApp.currentEvent!
    
        if event.type == NSEventType.rightMouseUp {
            print("Right click")
        } else {
            print("Left click")
        }
    }
    

    Swift 4

    let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
    
    if let button = statusItem.button {
        button.action = #selector(self.statusBarButtonClicked(_:))
        button.sendAction(on: [.leftMouseUp, .rightMouseUp])
    }
    
    func statusBarButtonClicked(sender: NSStatusBarButton) {
        let event = NSApp.currentEvent!
    
        if event.type == NSEvent.EventType.rightMouseUp {
            print("Right click")
        } else {
            print("Left click")
        }
    }
    

    A longer post is available at https://samoylov.eu/2016/09/14/handling-left-and-right-click-at-nsstatusbar-with-swift-3/

    0 讨论(0)
  • 2020-12-16 14:51

    for this you can use statusItem button property.

        let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)  
        let statusButton = statusItem!.button!
        statusButton?.target = self // or wherever you implement the action method
        statusButton?.action = "statusItemClicked:" // give any name you want
        statusButton?.sendActionOn(Int((NSEventMask.LeftMouseUpMask | NSEventMask.RightMouseUpMask).rawValue)) // what type of action to observe
    

    then you implement the action function, in the above code I named it "statusItemClicked"

    func statusItemClicked(sender: NSStatusBarButton!){
        var event:NSEvent! = NSApp.currentEvent!
        if (event.type == NSEventType.RightMouseUp) {
            statusItem?.menu = myMenu //set the menu
            statusItem?.popUpStatusItemMenu(myMenu)// show the menu 
        }
        else{
            // call your function here
        }
    }
    
    0 讨论(0)
提交回复
热议问题