我在NSMenuItem中使用一个非常简单的自定义视图(仅包含只读NSTextField和NSSegmentedControl)(使用 -setView: 方法) . 这部分按预期工作 .
这是问题所在:在 -menuNeedsUpdate: NSMenu委托方法中,我有条件地隐藏了菜单项 . 当我调用 [item setHidden:YES] 时,带有自定义视图的菜单项不会't hide, but other '香草'菜单项 .
我的自定义视图是在自己的XIB中构建的,我通过自定义的NSViewController访问它 .
Update
即使我在Interface Builder中选中隐藏复选框,菜单项仍然可见,并删除它隐藏在代码中的行 .
Update 2
我还尝试在菜单项上设置 hidden 之前和之后在自定义视图上设置 hidden . 结果就好像菜单项没有隐藏,但视图是;视图's controls aren' t可见,但它们应该存在差距 .
Update 3
我修改了Apple的MenuItemView示例代码,以便在添加之后隐藏其中一个菜单项(在第87行插入 [menuItem setHidden:YES]; ),它与我的代码具有相同的效果(也就是说,没有) .
我开始认为隐藏此菜单项的唯一方法是将其视图设置为 nil ,当我需要隐藏它并在需要显示时将其放回去,但似乎不应该是必要的 .
Update 4
使用Mike的答案,下面是我正在使用的代码:
// 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];
}
}