【问题标题】:Remove Dictation and Special Characters menu options from NSMenu从 NSMenu 中删除听写和特殊字符菜单选项
【发布时间】:2013-09-18 11:25:25
【问题描述】:

我有一个奇怪的“错误”。我正在为我的 Mac OSX 应用程序创建一个“编辑”菜单。它应包含复制、粘贴、全选等。我通过简单地将适当的选择器连接到Menues来解决该功能。

我将我的粘贴菜单项连接到粘贴: 我将我的副本 menuutem 连接到副本:

这很好用,我可以使用与其关联的菜单和快捷方式进行复制和粘贴。

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

如何删除它们?我在 xib 文件中的 Interface Builder 中创建菜单。

【问题讨论】:

  • 请不要删除这些菜单项。您个人可能对它们没有用处,但其他 Mac 用户希望这些菜单项可用。

标签: objective-c macos nsmenuitem nsmenu


【解决方案1】:

通过从代码中手动删除子菜单来解决它:

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

如果你有更好的答案请留言

【讨论】:

    【解决方案2】:

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

    类似:

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

    仅当标题在任何支持的语言上为“编辑”时才会添加这些菜单​​。但是就在加载界面的时候,那么(awakeFromNib)就已经可以把名字再放一遍了。

    【讨论】:

    • 我不明白你的意思。我的头衔从来不是“编辑”。它总是“Redigera”(瑞典语为“编辑”)。您建议从代码中设置 editMenu 会删除“听写”和“特殊字符”?
    • @Sunkas 因为“Redigera”是瑞典语中“edit”的意思,这种行为也出现在“edit”的翻译中。只需在 xib 中重命名“someName”并在加载后返回“Redigera”即可。例如:我的“编辑”菜单是“Editar”(葡萄牙语),如果我用这个名字打电话会出现“Dictations”和“Special Character”。因此,我将此菜单标题重命名为“someName”,并在 awakeFromNib 上再次更改为“Editar”。
    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 2011-04-11
    • 2016-01-23
    • 2016-10-26
    相关资源
    最近更新 更多