我在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