Принудительно запускать viewDidLoad на iOS
У меня есть приложение с двумя окнами, и пока я представляю первое окно, я бы хотел, чтобы представление во втором окне загружалось и подготавливало контент для последующего использования в фоновом режиме.
Я пытался использовать метод loadView
но Apple говорит, что вы не должны вызывать этот метод напрямую.
Пока что я решил использовать метод представления userInteractionEnabled
который на самом деле неявно вызывает viewDidLoad
метод.
Есть ли элегантный способ заставить ViewControllers
viewDidLoad
метод, чтобы стрелять раньше, чем он должен естественным образом (когда окно является ключевым и представлен)?
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
) и вызовите метод, для которого вы хотите выполнить действие. Затем, когда вы нажимаете на этот контроллер, не создавайте новый экземпляр. Просто используйте созданный вами экземпляр для глобального использования.