Удалить пункт меню «Открыть последние» в приложениях Какао - PullRequest
3 голосов
/ 10 июня 2011

Я нашел группу людей, которые спрашивали об этом (удалили или отключили подменю Recent-items), но ответов не было.

После небольшого расследования ... проблема в том, что Apple тайно жестко запрограммировала это конкретное меню, чтобы появилось всегда - даже если вы удалите его, NSWindowController автоматически создаст его заново.

1 Ответ

5 голосов
/ 10 июня 2011

РЕДАКТИРОВАТЬ: какой-то идиот захотел переписать мой ответ. Не. Или я его удалю. Согласно рецензенту, который первоначально отклонил редактирование: «Это изменение слишком незначительное; предлагаемое изменение должно быть существенным улучшением, затрагивающим несколько проблем в посте». Итак: не надо.


У Apple есть официальный обходной путь (где они неохотно принимают свою ошибку в жестком кодировании меню):

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

Кажется, работает нормально, после настройки IBOutlet:

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

... и убедитесь, что у вас есть класс AppDelegate, представленный внутри MainWindow.xib (например, с помощью объекта blue-cube, и установите для этого класса тот класс, которым является ваш AppDelegate) ... чтобы вы могли подключиться к самому меню «Файл» внутри NIB прямо к вашему приложению-делегату.

РЕДАКТИРОВАТЬ: на самом деле, модификация - исходный код 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];
}
...