Принудительно запускать viewDidLoad на iOS

У меня есть приложение с двумя окнами, и пока я представляю первое окно, я бы хотел, чтобы представление во втором окне загружалось и подготавливало контент для последующего использования в фоновом режиме.

Я пытался использовать метод loadView но Apple говорит, что вы не должны вызывать этот метод напрямую.

Пока что я решил использовать метод представления userInteractionEnabled который на самом деле неявно вызывает viewDidLoad метод.

Есть ли элегантный способ заставить ViewControllersviewDidLoad метод, чтобы стрелять раньше, чем он должен естественным образом (когда окно является ключевым и представлен)?

4 ответа

Решение

Вы можете просто позвонить [viewController view];,

Документация для UIViewController объясняет, как свойство представления загружается с отложенной загрузкой и что viewDidLoad вызывается после загрузки представления.

В iOS 9 Apple наконец исправила это:

// Loads the view controller's view if it has not already been set.
@available(iOS 9.0, *)
public func loadViewIfNeeded()

Swift 2.0, с тем же результатом решения @Carl Veazey:

let viewController = MyCustomViewController()
_ = viewController.view

Вы можете создать глобальный экземпляр для этого контроллера (может быть в AppDelegate) и вызовите метод, для которого вы хотите выполнить действие. Затем, когда вы нажимаете на этот контроллер, не создавайте новый экземпляр. Просто используйте созданный вами экземпляр для глобального использования.

Другие вопросы по тегам