2017-05-16 8 views
1

먼저 나는 상태 항목 선언 여기NSStatusItem NSStatusBar에서 행동 선택 방법은 응답하지

self.view.window?.orderOut(self) 
//self.view.window?.close() 

self.status_item = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength) 
if let status_button = self.status_item?.button { 
    status_button.image = NSImage(named: "StatusBarButtonImage") 
    status_button.action = #selector(statusBar(sender:)) 
} 

을 내 액션 선택기 메소드. 상태 항목을 제거하고 창을 다시 표시해야합니다.

func statusBar(sender: AnyObject) { 
    print("status bar clicked") 
    self.status_item = nil 
    self.view.window?.orderFront(nil) 
} 

선량 사람이 내가 잘못 알고 : 상태 표시 줄에 상태 표시 줄의 항목을 누를 때 그것은 상점 가 호출되지 않는거야?

답변

1

버튼 대상을 자체로 설정하십시오. AppDelegate에서 별도의 클래스로 코드를 이동했다고 가정합니다. 그렇다면 버튼이 여전히 AppDelegate에서 메시지를 받고 있습니다.

그래서 ...

if let status_button = self.status_item?.button { 
    status_button.image = NSImage(named: "StatusBarButtonImage") 
    status_button.action = #selector(statusBar(sender:)) 
    status_button.target = self //critical line 
}