从 NSTextView 上下文菜单中删除 'Layout Orientation'
Remove 'Layout Orientation' from NSTextView context menu
我有一个 NSTextView
,它附有一个显示行号的标尺。如果用户使用 'Layout Orientation' -> 'Vertical' 上下文菜单,事情就会变得不稳定。应用程序的预期目的无论如何都不支持垂直方向,所以我想删除这个上下文菜单。
到目前为止,我已经将 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
我最初的想法是我可以删除带有特定选择器的菜单项,但不幸的是 'Layout Orientation' 是一个子菜单,所以它有 submenuAction:
选择器。
我仍然可以通过比较标题来删除菜单,但这似乎是一种糟糕的方法,并且可能会在本地化环境中中断。
关于从 NSTextView 上下文菜单中正确删除菜单项的任何建议? (按索引删除也似乎很老套,因为这可能会在 OS 的不同版本上中断)。
每个子菜单菜单项都有一个菜单。扫描子菜单以执行操作 changeLayoutOrientation:
.
您可以通过实施 validateUserInterfaceItem:
来禁用布局方向菜单项。
- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)anItem {
if ([anItem action] == @selector(changeLayoutOrientation:))
return NO;
return [super validateUserInterfaceItem:anItem];
}
我有一个 NSTextView
,它附有一个显示行号的标尺。如果用户使用 'Layout Orientation' -> 'Vertical' 上下文菜单,事情就会变得不稳定。应用程序的预期目的无论如何都不支持垂直方向,所以我想删除这个上下文菜单。
到目前为止,我已经将 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
我最初的想法是我可以删除带有特定选择器的菜单项,但不幸的是 'Layout Orientation' 是一个子菜单,所以它有 submenuAction:
选择器。
我仍然可以通过比较标题来删除菜单,但这似乎是一种糟糕的方法,并且可能会在本地化环境中中断。
关于从 NSTextView 上下文菜单中正确删除菜单项的任何建议? (按索引删除也似乎很老套,因为这可能会在 OS 的不同版本上中断)。
每个子菜单菜单项都有一个菜单。扫描子菜单以执行操作 changeLayoutOrientation:
.
您可以通过实施 validateUserInterfaceItem:
来禁用布局方向菜单项。
- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)anItem {
if ([anItem action] == @selector(changeLayoutOrientation:))
return NO;
return [super validateUserInterfaceItem:anItem];
}