Подтвердить что ты не робот

Как изменить автоматически созданное окно About в моем приложении Cocoa?

Для меня автоматически создан пункт меню "О MyApp", и он отображает окно. Как отредактировать это окно? Я хотел бы добавить туда лишний материал, но я не могу найти xib где-нибудь.

Спасибо!

4b9b3361

Ответ 1

Измените содержимое файла Credits.rtf, расположенного внутри группы поддерживающих файлов вашего проекта.

enter image description here

Ответ 2

Для меня автоматически создан пункт меню "О MyApp", и он отображает окно about.

Это стандартно с шаблонами Xcode для приложений Cocoa. Продолжайте читать, чтобы узнать, как он подключен.

Как отредактировать это окно? Я хотел бы добавить туда лишний материал, но Я не могу найти xib где угодно.

Нет xib: это окно создается во время выполнения объектом приложения ([NSApplication sharedApplication]), когда оно получает сообщение orderFrontStandardAboutPanelWithOptions:, которое отправляется в этот пункт меню (когда вы проверяете в Инспекторе соединений в Interface Builder).

По умолчанию (как отмечали другие), он загружает содержимое для отображения из файла с именем "Credits.rtf", если такой файл существует в ресурсах вашего приложения; в противном случае он захватывает основную информацию из ваших записей в Info.plist приложения:

  • Имя приложения
  • Пакетная версия
  • Уведомление об авторских правах

Что вы можете сделать, это переопределить это поведение следующим образом:

  • Создайте пользовательское окно "О программе" в построителе интерфейса, со всеми необходимыми субвью и метками. Назовите файл "AboutWindow.xib".
  • Создайте пользовательский подкласс NSWindowController, инициализированный вашим пользовательским именем nib окна и установленным как владелец nib:

    - (instancetype) init {
        if(self = [super initWithWindowNibName:@"AboutWindow" owner:self]){
            // (other initialization...)
        }
    
        return self;
    }
    
  • Подключите под окну View About к октетам в классе оконного контроллера. Кроме того, укажите класс для File Owner как ваш пользовательский подкласс NSWindowController и подключите окно "Новая ссылка на выход" к свойству File Owner window.

  • Перейдите в MainMenu.xib в Interface Builder. Удалите действие, которое подключено к пункту меню "О...", и повторно подключите новый метод 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.

В нем есть:

  • Swift 4 (теперь, когда Xcode 9 является официальным)
  • Раскадровки вместо xibs
  • Переместил все выходы в новый контроллер просмотра, сохранил код окна в окне окна.