簡體   English   中英

帶情節提要的菜單欄-不會調用validateMenuItem

[英]Menubar with Storyboard - validateMenuItem not get called

我正在嘗試使用情節提要設置菜單欄應用程序,但未調用我的validateMenuItem方法。

我會盡力解釋我的所作所為。 首先,我在應用程序場景中拖動了一個菜單項。 然后是我的MenuController的一個對象。 創建一個MenuController(MenuController.swift)並用代碼填充。 回到我的情節提要中,將菜單委托設置為MenuController,將MenuController出口設置為Menu。 (我不確定我是否正確設置了代表。)

當我啟動應用程序時,出現菜單圖標,並且第一個項目標題設置為test。 但是,當我單擊圖標時, 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
    }
}

故事板菜單代表 故事板菜單代表
(來源: picr.de

情節提要MenuController代表 情節提要MenuController代表
(來源: picr.de

有人知道嗎?

來自奧地利的問候!

菜單/ UI驗證機制不查詢菜單的委托,而是使用項目的目標來確定啟用狀態。
如果未顯式設置目標,則它將遍歷響應者鏈。

要獲得基本驗證,您必須確保設置了以下內容:

  • 在界面生成器中選中了“自動啟用項目”(默認情況下處於啟用狀態)
  • 您可以將菜單的動作控制拖動到第一響應者
  • 菜單的操作在作為響應者鏈的一部分的類中實現(例如,為您的UI管理一組操作的視圖控制器)

validateUserInterfaceItem:基本實現對於帶有一個名為test的動作選擇器的項目來說可能類似於以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM