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
然后实现action函数,在上面的代码中,我将其命名为“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
}
}
3条答案
按热度按时间zazmityj1#
雨燕3
雨燕4
更长的帖子可在https://samoylov.eu/2016/09/14/handling-left-and-right-click-at-nsstatusbar-with-swift-3/上找到
v64noz0r2#
为此,您可以使用statusItem按钮属性。
然后实现action函数,在上面的代码中,我将其命名为“statusItemClicked”
rqcrx0a63#
在雨燕5中,
我是这样工作的。我能够从上面的答案中检测出它是右键单击还是左键单击。
但是,右键单击后,只能始终显示NSMenu。
然后,将
statusItem.button?.performClick(nil)
和statusItem?.menu = nil
相加您可以添加
statusItem?.popUpMenu(menu)
,但它在macOS 10.14中会贬值。(但它运行得很好。)最后,如果左键单击,它会运行一个函数。如果右键单击,它会运行像退出这样的菜单项。
感谢之前回答的人!