2015-10-21 21 views
6

Tôi đã cố phát triển một chương trình đơn giản nằm trong thanh trạng thái của Mac. Tôi cần nó để nếu bạn nhấp chuột trái, nó chạy một chức năng, nhưng nếu bạn kích chuột phải vào nó sẽ hiển thị một menu với một mục About và Quit.Mục so sánh bên trái và bên phải của thanh trạng thái Mac Swift 2

Tôi đã tìm kiếm nhưng tất cả những gì tôi có thể tìm thấy là chỉ dẫn hoặc kiểm soát các đề xuất nhấp chuột tuy nhiên tôi không muốn đi tuyến đường này.

Cảm ơn trước và mọi trợ giúp đều được đánh giá cao!

Trả lời

8

cho điều này bạn có thể sử dụng thuộc tính nút statusItem.

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 

sau đó bạn thực hiện các chức năng hành động, trong đoạn mã trên tôi đặt tên nó là "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 
    } 
} 
+1

Trong Swift 2, sử dụng toán tử '|' trên toán hạng 'NSEventMask' cho lỗi. – beeb

+1

statusButton? .sendActionOn (Int (NSEventMask.RightMouseUpMask.rawValue | NSEventMask.LeftMouseUpMask.rawValue)) đang làm việc với Swift 2 – Hampus

9

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") 
    } 
} 

Bài đăng dài hơn có sẵn tại https://samoylov.eu/2016/09/14/handling-left-and-right-click-at-nsstatusbar-with-swift-3/

Các vấn đề liên quan