Для меня автоматически создан пункт меню "О MyApp", и он отображает окно. Как отредактировать это окно? Я хотел бы добавить туда лишний материал, но я не могу найти xib где-нибудь.
Спасибо!
Для меня автоматически создан пункт меню "О MyApp", и он отображает окно. Как отредактировать это окно? Я хотел бы добавить туда лишний материал, но я не могу найти xib где-нибудь.
Спасибо!
Измените содержимое файла Credits.rtf
, расположенного внутри группы поддерживающих файлов вашего проекта.
Для меня автоматически создан пункт меню "О MyApp", и он отображает окно about.
Это стандартно с шаблонами Xcode для приложений Cocoa. Продолжайте читать, чтобы узнать, как он подключен.
Как отредактировать это окно? Я хотел бы добавить туда лишний материал, но Я не могу найти xib где угодно.
Нет xib: это окно создается во время выполнения объектом приложения ([NSApplication sharedApplication]
), когда оно получает сообщение orderFrontStandardAboutPanelWithOptions:
, которое отправляется в этот пункт меню (когда вы проверяете в Инспекторе соединений в Interface Builder).
По умолчанию (как отмечали другие), он загружает содержимое для отображения из файла с именем "Credits.rtf", если такой файл существует в ресурсах вашего приложения; в противном случае он захватывает основную информацию из ваших записей в Info.plist приложения:
Что вы можете сделать, это переопределить это поведение следующим образом:
Создайте пользовательский подкласс NSWindowController
, инициализированный вашим пользовательским именем nib окна и установленным как владелец nib:
- (instancetype) init {
if(self = [super initWithWindowNibName:@"AboutWindow" owner:self]){
// (other initialization...)
}
return self;
}
Подключите под окну View About к октетам в классе оконного контроллера.
Кроме того, укажите класс для File Owner как ваш пользовательский подкласс NSWindowController и подключите окно "Новая ссылка на выход" к свойству File Owner window
.
about:
объекта-заполнителя "Первый ответчик".В своем делете приложения добавьте переменную экземпляра, чтобы удерживать ваш оконный контроллер, чтобы он не сразу освобождался (в качестве альтернативы сделайте свой класс оконного контроллера одиночным и используйте экземпляр общего доступа):
@implementation AppDelegate {
AboutWindowController *_aboutwindowController;
}
В AppDelegate реализуем метод about:
, который вы подключили на шаге 3, например:
- (IBAction)about:(id)sender {
if (_aboutwindowController == nil) {
_aboutwindowController = [AboutWindowController new];
}
[_aboutwindowController.window orderFront:self];
}
... или, если ваш контроллер представления реализован как одиночный, например:
- (IBAction)about:(id)sender {
[[AboutWindowController defaultController].window orderFront:self];
}
Наконец, чтобы ваш оконный контроллер правильно отображал информацию о вашем приложении, прочитайте соответствующие ключи из файла Info.plist, как это (фактические выходные ивары будут разными в вашем случае):
- (void)windowDidLoad {
[super windowDidLoad];
// Implement this method to handle any initialization after your window
// controller window has been loaded from its nib file.
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
self.appNameLabel.stringValue = [infoDictionary objectForKey:@"CFBundleName"];
self.appVersionLabel.stringValue = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
self.appCopyrightLabel.stringValue = [infoDictionary objectForKey:@"NSHumanReadableCopyright"];
}
Возможно, у вас также возникнет соблазн прочитать значок приложения из связанных ресурсов, но есть более элегантный способ, который работает, даже если вы не указали значок и застряли по умолчанию "Ruler + Pencil + Brush over Sheet" "значок приложения: захватить изображение образа рабочего времени, используя следующий код:
self.appIconImageView.image = [NSApp applicationIconImage];
Я собрал демонстрационный проект на Github, который показывает эту и дальнейшую настройку окна About.
ОБНОВЛЕНИЕ: Я добавил Swift версию демонстрационного проекта репозиторий Github.
В нем есть: