2015-11-08 61 views
1

我試圖安裝使用故事板在菜單欄的應用程序,但我validateMenuItem方法不會被調用。菜單欄與故事板 - validateMenuItem不會被調用

我會盡量解釋我做了什麼。 首先我在我的應用場景中拖動菜單項。然後一個對象爲我的MenuController。創建一個MenuController(MenuController.swift)並用代碼填充它。回到故事板中,我將Menu委託設置爲MenuController,將MenuController Outlet設置爲Menu。 (我不能完全肯定我是否已正確設置代表。)

當我啓動應用程序,菜單圖標出現,第一項標題設置爲測試。但是當我點擊圖標validateMenuItem方法不會被調用。

MenuController.swift

import Cocoa 
class MenuController: NSObject { 

    var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1) 

    @IBOutlet weak var statusMenu: NSMenu! 
    @IBOutlet weak var item1: NSMenuItem! 

    override func awakeFromNib() { 
     print("awakeFromNib") 

     self.item1.title = "Test" 

     let icon = NSImage(named: "menubarIcon") 
     statusItem.image = icon 
     statusItem.menu = statusMenu 
    } 

    override func validateMenuItem(menuItem: NSMenuItem) -> Bool { 
     print("validateMenuItem") 
     return true 
    } 
} 

故事板菜單代表 Storyboard Menu Delegates http://up.picr.de/23648472pu.jpg

故事板MenuController代表 Storyboard MenuController Delegates http://up.picr.de/23648473df.jpg

有任何人的想法?來自奧地利

映入眼簾!

回答

3

菜單/ UI驗證機制不查詢菜單的委託,但使用該項目的目標,確定啓用狀態來代替。
如果目標沒有明確設置,它走的響應鏈。

爲了獲得基本的驗證,你必須確保下面的事情是設置:

  • 「自動啓用項目」(默認情況下)在Interface Builder檢查
  • 您控制拖菜單的行動的第一個響應者
  • 菜單的動作是在類,它是響應鏈的一部分來實現(例如管理一組動作對你的UI視圖控制器)

基本實現的validateUserInterfaceItem:可能看起來像用行動選擇的項目以下稱爲測試:

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool 
{ 
    if anItem.action() == Selector("test:") { 
     print("validating item \(anItem)") 
     return true 
    } 
    return true 
} 
+0

我忘記連接動作。現在它可以工作。謝謝!! – FaHa