我在NSMenuItem(使用-setView:
方法)中使用了一個非常簡單的自定義視圖(僅包含只讀NSTextField和NSSegmentedControl)。這部分按預期工作。如何隱藏自定義視圖的菜單項?
下面是問題:在-menuNeedsUpdate:
NSMenu委託方法我有條件地隱藏菜單項。當我打電話給[item setHidden:YES]
時,具有自定義視圖的菜單項不會隱藏,但其他「香草」菜單項卻可以。
我的自定義視圖是在它自己的XIB中構建的,我通過自定義的NSViewController訪問它。即使我檢查在Interface Builder中隱藏複選框,並刪除它是隱藏在代碼行
更新
菜單項保持可見。
更新2
我也嘗試過和菜單項設置hidden
後的自定義視圖設置hidden
。結果就好像菜單項不隱藏,但視圖是;視圖的控件不可見,但它們應該存在差距。
更新3
我修改蘋果的MenuItemView示例代碼隱藏菜單項之一它的加入後(第87行插入[menuItem setHidden:YES];
),它有在我的代碼相同的效果(這是說,沒有)。
我開始認爲隱藏這個菜單項的唯一方法是將其視圖設置爲nil
,當我需要隱藏它並在需要顯示時將它放回去,但似乎並不是這樣應該是必要的。
更新4
使用下面小李的答案,這裏是我使用的代碼:
// Declared in the header file
IBOutlet NSMenuItem *previousMenuItem;
IBOutlet NSMenuItem *togglingMenuItem; //Needs to be RETAINED
. . .
- (void)menuNeedsUpdate:(NSMenu *)menu {
BOOL hideItem = YES; // Some criteria, obviously
// Remove the menu item, if it was already present
if ([menu indexOfItem:togglingMenuItem] >= 0) {
[menu removeItem:togglingMenuItem];
}
// Put it back if it should be visible
if (!onePageVisible) {
[menu insertItem:togglingMenuItem
atIndex:[menu indexOfItem:previousMenuItem] + 1];
}
}
我試圖擺脫這個特定的控制器沒有任何引用特定的菜單項,但這可能是最好的方式去。 – Dov 2011-05-03 16:21:56
我必須承認有一個很深的偏見:完成它,運送它,準確地確定它爲什麼做/不作爲讀者的練習。祝你好運。 – Rayfleck 2011-05-03 16:37:48
阿門,@Mike。阿門。 – Dov 2011-05-03 16:47:01