2017-02-25 106 views
0

我有一個應用程序在macOS的菜單欄上顯示一個自定義視圖。當點擊自定義視圖時,我想顯示一個上下文菜單(NSMenu)。菜單欄左鍵點擊額外沒有打開

我的代碼如下所示:

私人讓statusItem = NSStatusBar.system()statusItem(withLength:NSVariableStatusItemLength) 私人VAR計時器:計時器? private var view:MenuView! 私有var菜單:NSMenu! private let popover = NSPopover() private var popoverController:PopoverViewController?但是,當我點擊視圖時,菜單並不像我所期望的那樣顯示(當然,它根本不顯示)。 當我不使用我的自定義視圖並僅設置圖像時,單擊它時會打開上下文菜單。 如何在使用自定義視圖時顯示菜單?

問候, 薩沙

回答

1

如果使用自定義視圖你負責處理所有的事件,繪圖和突出顯示。

init(frame:)視圖的方法通過NSStatusBar實例。將菜單分配給視圖而不是statusItem

至少你必須覆蓋mouseDown

override func mouseDown(with theEvent: NSEvent) { 
    statusItem.popUpMenu(menu!) 
    needsDisplay = true 
} 
+0

感謝您的提示,我有一個稍微不同的方式去了。我仍然將菜單分配給狀態項目。點擊視圖後,會發送通知,然後在AppDelegate中處理。這裏調用popUpMenu函數。謝謝。 –

+1

由於實例可以從任何地方直接訪問('NSApp.delegate'),因此不鼓勵將通知發送到'Appdelegate'。僅在有多個接收者或視圖/控制器不相互關聯時才使用通知。此外,我會建議在**視圖中始終保持關於視圖的邏輯**。 – vadian

+0

好吧,我會改變它,然後再次感謝你。不知道NSApp.delegate訪問。 –