Вплоть до iOS 12 AppDelegate
будет иметь дело с событиями уровня процесса, сообщая, когда приложение запускается и завершается, и сообщая вам о состоянии его пользовательского интерфейса с помощью методов жизненного цикла пользовательского интерфейса, таких как действительно вошел в фоновый режим или передний план события. Это сделало AppDelegate
идеальным местом для разработчиков, чтобы настроить UIWindow
контейнер для программного запуска точки входа приложения. Это было нормально в мире приложений единого окна ...
Начиная с iOS 13 и новее, у нас теперь есть концепция возможностей многооконного сеанса, позволяющая запускать несколько экземпляров приложения одновременно с различным контентом. Окна управляются сценой или UISceneSession
классом. Делегат вашего приложения по-прежнему будет обрабатывать события процесса, но больше не будет нести ответственность за настройку окна. События жизненного цикла пользовательского интерфейса теперь управляются UISceneDelegate
в другом месте файла SceneDelegate.swift. Это делает App Delegate более компактным и дает вашей программной точке входа более подходящий дом, где он может получать методы жизненного цикла пользовательского интерфейса для каждого сеанса.
Вот как перенести программную настройку вашего приложения из делегата приложения в делегат сцены и как отказаться от Main.storyboard
в iOS 13 и новее.
Шаг 1/4: Удалите файл Main.storyboard
Вам нужно удалить Main.storyboard
и избавиться от ViewController.swift
, так как вы, скорее всего, захотите создать свой собственный начальный контроллер представления. По крайней мере, вы можете просто переименовать этот класс во что-нибудь более подходящее для вашего приложения.
Шаг 2/4: Удалите 2 пары значений ключа в info.plist
Удалите из файла info.plist
следующие пары "ключ-значение":
1. Storyboard Name
2. Main storyboard file base name
, а в терминологии AppleScript они называются
UISceneStoryboardFile
и UIMainStoryboardFile
соответственно.
Если вы запустите приложение сейчас, вы увидите черный экран. Это правильное поведение, поскольку вы не создали окно для представления, в котором вам также потребуется создать начальный контроллер представления для отображения. Это подводит нас к следующим двум шагам. Создание контроллера представления и создание окна.
Шаг 3/4: Создайте свой начальный контроллер представления
Теперь нам нужно создать начальный контроллер представления, который мы хотим представить пользователю, когда он будет работать с вашим приложением. Вы можете иметь любую сложную иерархию, какую захотите, но в этом примере мы будем придерживаться простого UIViewController
с именем ArticleListViewController
.
Вы можете создать свой контроллер представления, как захотите, в нашем случае это так же просто, как File -> New -> File …,
выбрав Cocoa Touch Class
, напишите имя вашего класса, нажмите «Далее» и нажмите «Создать».
Ваш программный UIViewController
класс появится в навигаторе проекта в списке файлов.
Примечание. Представление в контроллерах представлений в раскадровках имеет белый цвет фона по умолчанию. Это по сравнению с программными контроллерами представления, представления которых не имеют цвета фона по умолчанию! Если вы не установите цвет фона для вашего представления, вы получите черное окно в конце этого руководства. Поэтому установите цвет вашего представления вашего контроллера представления, как view.backgroundColor = .white
в методе viewDidLoad
.
Последний шаг: программно создайте иерархию окон
Как ранее разработчики писали в делегате приложения, теперь вы просто указываете настройку окна в делегате сцены.
Запустите приложение, и теперь у вас будет первый сеанс сцены, управляющий точкой входа в приложение слишком программно!
В следующий раз мы сосредоточимся на том, как изменить ваше приложение для создания многооконного приложения!
Узнайте, как быстро развернуть опции в другой статье, которую я написал!
Если вам понравился мой контент сегодня, подумайте о том, чтобы подписаться на меня здесь, на Medium, так как я хотел бы, чтобы вы стали частью моего писательского пути для iOS.