OSX - как перенести xib на раскадровку

У меня есть приложение с mainmenu.xib, и по разным причинам я хочу перенести его в раскадровку. Есть ли способ сделать это без создания нового проекта?

1 ответ

Вот как это сделать:

  1. Создайте новый проект с раскадровкой. Мы просто собираемся использовать его, чтобы скопировать одну маленькую вещь, которую нельзя найти в библиотеке объектов.

  2. Вернувшись в существующий проект, добавьте новый файл пользовательского интерфейса раскадровки (например, Main.storyboard) в существующий проект. В отличие от запуска нового проекта, файл раскадровки будет полностью пустым.

  3. Из раскадровки нового проекта скопируйте "Сцена приложения" и вставьте ее в раскадровку существующего проекта. Это обходной путь из-за невозможности получить сцену приложения из библиотеки объектов. После этого убедитесь, что свойство "Делегат" объекта App Delegate имеет ссылку на "Приложение", просмотрев Инспектор соединений (правая боковая панель). Если это не так, свяжите их вместе.

  4. В библиотеку объектов (правая панель> библиотека объектов ниже) добавьте контроллер окна. Это добавит сцену контроллера окна и сцену контроллера вида.

  5. Ссылка на соответствующие классы для контроллера окна / окна / контроллера представления / представления, если вы используете пользовательские классы.

  6. Откройте свой предыдущий файл xib и скопируйте в любые просмотры, которые вы использовали ранее.

  7. В файле xcproj вашего существующего проекта перейдите в раздел info для цели сборки и замените ключ / значение словаря xib на "NSMainStoryboardFile"для ключа и"Main" (или как бы ваш файл раскадровки назывался sans fileextension) для значения.

Дополнительные примечания:

  • Если вы используете настраиваемые контроллеры представления и переносите их на раскадровку, убедитесь, что они позволяют инициироваться через initWithCoder.

  • Если вам нужно получить viewcontroller из appdelegate, вы не можете сделать это с помощью методов instantiateWithName NSStoryboard, которые создадут новый экземпляр. Вместо этого сделайте следующее:

    NSApplication *application = [NSApplication sharedApplication];
    
    NSWindow *window = application.windows[0];
    
    self.myCustomViewController = (MyCustomViewController *)window.contentViewController;
    
Другие вопросы по тегам