У меня есть следующие объекты в моем пере приложения:
В моем AppDelegate applicationDidFinishLaunching я делаю это:
Вопрос/проблема: когда я делаю все вышеупомянутое, viewDidAppear: не стреляет для "d". (но viewDidLoad стреляет.), Как я узнаю, почему это не стреляет, и фиксируют его так, чтобы это стреляло бы?
(Почему я хочу использовать viewDidAppear: вышеупомянутое включает некоторые цепочечные анимации, и viewDidAppear похож на хорошее место для контроллера представления для знания, когда его представление было загружено и анимировано, таким образом, это может инициировать последующие анимации.)
Обычно, когда вы вручную прикручиваете иерархию представлений, вы не получите -viewWillAppear:
, -viewDidAppear
и т.д. Они вызываются различными SDK методами, такими как -pushViewController:animated:
, -presentModalViewController:animated:
, и UITabBarController
, когда выбрана вкладка.
Когда вы сами добавляете вид в иерархию, он может отображаться на экране, а может и не отображаться на экране; метод -addSubview:
не делает никаких предположений о ваших намерениях. Просто назовите их сами, когда будете добавлять вид.
Первое, что вы должны знать, это то, что ViewDiDiDAppear - это метод UiviewController, а не UIView, на самом деле не имеет ничего общего с видами.
Второе, что может быть только один «активный» UiviewController за раз.
Когда вы добавляете «A» VICK в окно, он становится активным UiviewController, и только «A» получит сообщениеDiDAppear Message, пока «E» на самом деле не будет получать методы, связанные с UIViewContoller (ViewDiDiDAppear, ViewWillAppear и т. Д. )
Как упоминается @noah, когда вы используете PushViewController, вы получите эти сообщения, поскольку метод приводит к тому, что способ нажатой контроллера представления стал «активным» UiviewController.
Мое предложение для вас - это то, что если вы создаете контроллеры для представлений, которые являются подваими, не подклассьте UiviewController, а скорее nsobject, он уменьшит уровень путаницы, поскольку вы не будете ожидать, что ваши методы UIViewController вызывают, которые они не будут в любом случае.