2017-02-18 7 views
0

스위프트 3로 작은 메뉴 바 앱을 만들고 있습니다. 아이콘을 클릭하면 앱이 일부 데이터를 다시로드하기를 원합니다. statusMenu? 나는 해봐요() 함수가 실행됩니다MacOS 상태 표시 줄 앱 show menu and run on swift 3

// statusItem.menu = statusMenu 

을 주석,하지만 난 모두를 표시하는 방법을 알아낼 수없는 경우

// AppDelegate.swift 

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet weak var statusMenu: NSMenu! 

    @IBAction func quitClicked(_ sender: NSMenuItem) { 
     NSApplication.shared().terminate(self) 
    } 

    let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength) 

    func applicationDidFinishLaunching(_ aNotification: Notification) { 
     if let button = statusItem.button { 
      button.title = "App" 
      button.action = #selector(AppDelegate.doSomething(sender:)) 
      statusItem.menu = statusMenu 
     } 
    } 

    func applicationWillTerminate(_ aNotification: Notification) { 
    } 

    func doSomething(sender: AnyObject?) { 
     NSLog("do something") 
    } 


} 

: 아래

는 내 코드의 샘플입니다 메뉴를 열고 doSomething 함수를 실행하면 어떻게 할 수 있습니까?

+0

나는 함수가 실행 중일 때 상태 표시 줄 앱의 충돌을 피하기 위해 상태 표시 줄 앱 아이콘에 하나의 진도가 있다는 것을 발견했다.이 줄을 각 함수에 추가하는 것이 유용하다. statusItem.isEnabled = false (처음에는) 및 statusItem.isEnabled = true (함수 끝에서). – Fredo

답변

2

메뉴의 대리자를 응용 프로그램 대리인 (또는 다른 개체)으로 설정하고 프로토콜의 optional func menuWillOpen(_ menu: NSMenu)을 구현합니다.

+0

굉장합니다, 고마워요, 제가 정확히 찾고 있었던 것이 었습니다. – Harold