Как изменить автоматически сгенерированное окно «О программе» в приложении Какао? - PullRequest
20 голосов
/ 14 декабря 2011

Пункт меню для «About MyApp» был автоматически создан для меня, и он отображает окно «About».Как мне отредактировать это окно?Я хотел бы добавить кое-что еще, но я нигде не могу найти xib.

Спасибо!

Ответы [ 2 ]

32 голосов
/ 14 декабря 2011

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

enter image description here

11 голосов
/ 12 февраля 2016

Пункт меню для «About MyApp» был автоматически создан для меня и отображает окно «about».

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

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

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

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

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

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

  1. Создайте собственное окно «О программе» в Интерфейсном конструкторе со всеми необходимыми подпредставлениями и метками, которые вы хотите.Назовите файл «AboutWindow.xib».
  2. Создайте пользовательский подкласс NSWindowController, инициализированный именем пера вашего пользовательского окна и назначенный владельцем пера:

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

  4. Перейдите в файл MainMenu.xib в Интерфейсном Разработчике.Удалите действие, привязанное к пункту меню «О программе», и заново подключите новое к методу about: объекта-заполнителя «Первый ответчик».
  5. В вашемделегат приложения, добавьте переменную экземпляра для хранения вашего оконного контроллера, чтобы он не был освобожден сразу (альтернативно, сделайте ваш класс оконного контроллера одноэлементным и используйте экземпляр общего ресурса):

    @implementation AppDelegate {
    
        AboutWindowController *_aboutwindowController;
    }
    
  6. Все еще в 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];
    }
    
  7. Наконец, для того, чтобы ваш оконный контроллер правильно отображал информацию вашего приложения, прочитайте соответствующие ключи из файла Info.plist, например, так (фактический выходной ивар будет отличаться вваш случай):

    - (void)windowDidLoad {
        [super windowDidLoad];
    
        // Implement this method to handle any initialization after your window
        // controller's 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"];
    }
    

У вас может возникнуть соблазн прочитать значок приложения и в комплекте ресурсов, но есть более элегантный способ, который работает, даже если вы не указалии застряли со стандартным значком приложения «Линейка + карандаш + кисть на листе»: возьмите изображение значка среды выполнения, используя следующий код:

self.appIconImageView.image = [NSApp applicationIconImage];

Я собрал демонстрационный проект наGithub , который показывает эту и другие настройки окна About.


ОБНОВЛЕНИЕ: Я добавил Swift версию демонстрации проект в хранилище Github.

Он имеет:

  • Swift 4 (теперь, когда Xcode 9 официально)
  • Раскадровки вместо xibs
  • Перемещены все выходыновый контроллер view , сохранил код появления окна в контроллере window .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...