Удалить пункты меню «Диктовка» и «Специальные символы» из NSMenu

У меня странный "баг". Я создаю меню «Редактировать» для своего приложения Mac OSX. Он должен содержать копирование, вставку, выбор всего и т. д. Я решил эту функциональность, просто подключив соответствующие селекторы в первом ответчике к меню.

Я подключаю свой пункт меню вставки к вставке: Я подключаю свой пункт меню копирования к копированию:

Это отлично работает, и я могу копировать и вставлять, используя как меню, так и ярлыки, связанные с ними.

Однако при подключении к селектору copy: первого респондера внизу появляются два новых пункта меню: «Диктовки» и «Особый символ».

Как их удалить? Я создаю меню в Interface Builder в xib-файле.


person Sunkas    schedule 18.09.2013    source источник
comment
Пожалуйста, не удаляйте эти пункты меню. Лично вам они могут быть бесполезны, но другие пользователи Mac ожидают, что эти пункты меню будут доступны.   -  person chrstphrchvz    schedule 04.03.2019


Ответы (2)


Решил это, вручную удалив подменю из кода:

- (void)windowDidLoad {
    [super windowDidLoad];
    [self presentModalViewController:self.bookshelfController withData:nil];

    [self removeLastMenuItemsOfRedigeraMenu];
}

-(void)removeLastMenuItemsOfRedigeraMenu
{

    NSMenu *mainMenu = [NSApp mainMenu];
    for (NSMenuItem* subMenu in mainMenu.itemArray)
    {
        if ([subMenu.title isEqualToString:@"Redigera"])
        {
            NSArray *array = subMenu.submenu.itemArray;
            for (int i = (int)array.count-1; i >= 0; i--)
            {
                if (i >= 11)
                {
                    [subMenu.submenu removeItem:[array objectAtIndex:i]];
                }
            }
        }
    }
}

Пожалуйста, напишите, если у вас есть лучший ответ

person Sunkas    schedule 18.09.2013

Вы можете изменить название пункта меню на любое другое, а через awakeFromNib обратно с нужным вам названием.

Что-то вроде:

    [_editMenuItem.submenu setTitle:NSLocalizedString(@"Edit",NULL)];

Он добавляет эти меню только тогда, когда заголовок «редактировать» на любом из поддерживаемых языков. А вот как раз при загрузке интерфейса, то (awakeFromNib) уже может поставить имя заново.

person Wallacy    schedule 11.11.2013
comment
Я не понимаю, что вы имеете в виду. Мой заголовок никогда не редактируется. Это всегда Redigera (по-шведски для редактирования). Вы предлагаете, чтобы установка editMenu из кода удаляла диктовки и специальные символы? - person Sunkas; 11.11.2013
comment
@Sunkas Потому что Redigera - это шведский язык для редактирования, и такое поведение встречается и в переводах для редактирования. Просто переименуйте для someName в xib и вернитесь в Redigera после того, как загрузка будет работать нормально. Например: Мое меню редактирования - Editar (португальский), если я позвоню с этим именем, появятся Диктовки и Специальные символы. Итак, я переименовал этот заголовок меню в someName, а в awakeFromNib снова изменил его на Editar. - person Wallacy; 19.11.2013