2013-03-03 25 views
3

我面臨一個奇怪的情況。我有一個NSMenu與其中的子菜單。子菜單的內容以編程方式填充。在我的validateMenuItem:方法中,我可以看到所有正在檢查的項目(父項目)以及子項目(一旦我點擊子菜單),除了我的自動填充子菜單中的項目。validateMenuItem:不叫

這是爲什麼?難道我做錯了什麼?任何想法如何解決這個問題?

+0

這些菜單項正常運行,否則(即當你選擇他們,他們觸發他們的行動方法)? – trojanfoe 2013-03-03 10:27:43

+0

@trojanfoe剛剛找到了答案(很簡單,說實話...) - 我現在就發佈它。 – 2013-03-03 10:30:29

+0

@trojanfoe所有菜單項的操作都是在控制器中實現的,而一個特定的子菜單的子項操作不是。因此,'validateMenuItem:'方法不被調用。 (令人沮喪的...因爲我在發帖前2小時還在努力掙扎(然後在10分鐘後自己回答...大聲笑)) – 2013-03-03 10:35:27

回答

11

下面是解:

可可查找在其中NSMenuItem的動作選擇器是類的validateMenuItem:方法。

因此,如果您NSMenuItem的動作選擇(例如@selector(someSelector:))在SomeClass實現,那麼請確保您有一個SomeClass方法validateMenuItem:也一樣,如果你想驗證相應的菜單項。

+1

你不是以你的行動爲目標* First Responder *嗎? – trojanfoe 2013-03-03 10:35:30

+0

@trojanfoe不,我不是。所有操作都鏈接到特定的類。我應該瞄準第一響應者嗎? – 2013-03-03 10:36:40

+0

我想這取決於應用程序,但在我的基於文檔的應用程序中,我的所有菜單都以* First Responder *爲目標。 – trojanfoe 2013-03-03 10:37:27