我有一张NSTextView
,附有标尺,显示行号。如果用户使用“布局方向” - > '垂直'上下文菜单,事情变得不稳定。应用程序的目的不支持垂直方向,所以我想删除此上下文菜单。
到目前为止,我已经将NSTextView
子类化并覆盖了defaultMenu
行动:
+ (NSMenu *) defaultMenu
{
// Get our default menu
NSMenu * contextMenu =
[NSTextView defaultMenu];
for(NSInteger menuItemIndex = contextMenu.itemArray.count - 1;
menuItemIndex != -1;
--menuItemIndex)
{
NSMenuItem * menuItem =
[contextMenu itemAtIndex: menuItemIndex];
NSLog(@"%ld %@, %@",
menuItemIndex,
NSStringFromSelector(menuItem.action),
menuItem.title);
} // End of menuItem loop
return contextMenu;
} // End of defaultMenu
我最初的想法是我可以使用特定的选择器删除菜单项,但不幸的是“布局方向”是一个子菜单,因此它有submenuAction:
选择器。
我仍然可以通过比较标题来删除菜单,但这似乎是一种不好的方法,可能会在局部环境中破坏。
有关从NSTextView上下文菜单中删除菜单项的正确建议吗? (通过索引删除也似乎很麻烦,因为这可能会破坏不同版本的操作系统)。
答案 0 :(得分:1)
每个子菜单menuitem都有一个菜单。扫描子菜单以查看操作changeLayoutOrientation:
。
您可以通过实施validateUserInterfaceItem:
来禁用布局方向菜单项。
- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)anItem {
if ([anItem action] == @selector(changeLayoutOrientation:))
return NO;
return [super validateUserInterfaceItem:anItem];
}