删除Cocoa应用程序中的“打开最近”菜单项

时间:2011-06-10 14:09:18

标签: objective-c cocoa macos nsmenu

我发现有很多人问这个(删除或禁用最近项子菜单)并没有答案。

经过一番调查......问题是Apple已经秘密地硬编码了总是出现的特定菜单 - 即使你删除它,NSWindowController也会默默地重新创建它。 / p>

1 个答案:

答案 0 :(得分:5)

编辑:有些白痴感觉像是在重写我的回答。别。或者我会删除它。根据最初拒绝编辑的评论者:“此编辑太小;建议编辑应该是解决帖子中多个问题的实质性改进。”所以:不要。


Apple有一个官方的解决方法(他们勉强接受他们在硬编码菜单时的错误):

http://developer.apple.com/library/mac/#qa/qa2001/qa1289.html

似乎工作正常,一旦你设置了IBOutlet:

@property( nonatomic, retain) IBOutlet NSMenu* fileMenu;

...并确保你在MainWindow.xib中有你的AppDelegate类(例如使用蓝色立方体对象,并将类设置为你的AppDelegate所属的类)...所以你可以连接文件菜单本身在NIB内部直接向您的app-delegate。

编辑:实际上,修改 - Apple的源代码无法使用Xcode4正确编译,从而生成编译器警告。你想要这个:

NSInteger openDocumentMenuItemIndex = [self.fileMenu indexOfItemWithTarget:nil andAction:@selector(openDocument:)];

if (openDocumentMenuItemIndex>=0 &&
    [[self.fileMenu itemAtIndex:openDocumentMenuItemIndex+1] hasSubmenu])
{
    // APPLE'S COMMENT: We'll presume it's the Open Recent menu item, because this is
    // APPLE'S COMMENT: the heuristic that NSDocumentController uses to add it to the
    // APPLE'S COMMENT: File menu
    [self.fileMenu removeItemAtIndex:openDocumentMenuItemIndex+1];
}