У меня есть NSTextView
, у которого имеется линейка, показывающая номера строк. Если пользователь использует контекстное меню «Ориентация макета» -> «Вертикальное», все становится неуклюжим. Назначение, предназначенное для приложений, в любом случае не поддерживает вертикальную ориентацию, поэтому я хотел бы удалить это контекстное меню.Удалить «Ориентация макета» в контекстном меню 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:
.
Я все еще мог удалить меню, сравнив название, но это похоже на плохой способ сделать это и, вероятно, сломается в локализованной среде.
Любые предложения относительно того, чтобы PROPERLY обходить пункты меню из контекстного меню NSTextView? (Удаление по индексу также кажется взломанным, поскольку это может привести к разрыву на разных версиях ОС).