Objective c 从NSMenu中删除听写和特殊字符菜单选项

Objective c 从NSMenu中删除听写和特殊字符菜单选项,objective-c,macos,nsmenuitem,nsmenu,Objective C,Macos,Nsmenuitem,Nsmenu,我有一个奇怪的“臭虫”。我正在为我的Mac OSX应用程序创建一个“编辑”菜单。它应包含复制、粘贴、选择等所有内容。我只需将第一响应器中的相应选择器连接到菜单,就可以解决该功能 我将“粘贴”菜单项连接到粘贴: 我将“复制”菜单项连接到“复制”: 这项工作非常好,我可以使用菜单和与之相关的快捷方式进行复制和粘贴 但是,当连接到第一响应者的copy:选择器时,底部会出现两个新的菜单选项:“听写”和“特殊字符” 如何移除它们?我正在用xib文件在Interface Builder中创建菜单。通过手动从

我有一个奇怪的“臭虫”。我正在为我的Mac OSX应用程序创建一个“编辑”菜单。它应包含复制、粘贴、选择等所有内容。我只需将第一响应器中的相应选择器连接到菜单,就可以解决该功能

我将“粘贴”菜单项连接到粘贴: 我将“复制”菜单项连接到“复制”:

这项工作非常好,我可以使用菜单和与之相关的快捷方式进行复制和粘贴

但是,当连接到第一响应者的copy:选择器时,底部会出现两个新的菜单选项:“听写”和“特殊字符”


如何移除它们?我正在用xib文件在Interface Builder中创建菜单。

通过手动从代码中删除子菜单解决了此问题:

- (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]];
                }
            }
        }
    }
}

如果您有更好的答案,请发布

您可以将菜单项的名称更改为任何其他名称,并通过awakeFromNib返回您想要的名称

比如:

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

只有当标题在任何受支持的语言上为“编辑”时,它才会添加这些菜单​​. 但就在加载接口时,(awakeFromNib)已经可以重新输入名称了。

我不明白你的意思。我的标题从来不是“编辑”。它总是“Redigera”(瑞典语中“edit”的意思)。您建议从代码中设置editMenu会删除“听写”和“特殊字符”?@Sunkas,因为“Redigera”是瑞典语,表示“编辑”,这种行为也发生在“编辑”的翻译中。只需在xib中为“someName”重命名,并在加载正常后返回“Redigera”。例如:我的“编辑”菜单是“编辑”(葡萄牙语),如果我用这个名字打电话,就会显示“听写”和“特殊字符”。因此,我将菜单标题重命名为“someName”,并在awakeFromNib上再次更改为“Editar”。请不要删除这些菜单项。您个人可能对它们没有任何用处,但其他Mac用户希望这些菜单项可用。