viewDidAppear: не увольнение при определенных условиях?

У меня есть следующие объекты в моем пере приложения:

  • обычное: владелец файла, первое окно респондента, делегат
  • Контроллер представления "a"
    • Представление "b"
      • UIScrollView "c"
      • некоторый другой материал в "b"

В моем AppDelegate applicationDidFinishLaunching я делаю это:

  1. [окно makeKeyAndVisible]
  2. [окно addSubView:a.view];
  3. создайте контроллер представления "d"
  4. создайте navigationController "e" с rootviewcontroller "d"
  5. вызовите [c addSubView:e.view]

Вопрос/проблема: когда я делаю все вышеупомянутое, viewDidAppear: не стреляет для "d". (но viewDidLoad стреляет.), Как я узнаю, почему это не стреляет, и фиксируют его так, чтобы это стреляло бы?

(Почему я хочу использовать viewDidAppear: вышеупомянутое включает некоторые цепочечные анимации, и viewDidAppear похож на хорошее место для контроллера представления для знания, когда его представление было загружено и анимировано, таким образом, это может инициировать последующие анимации.)

5
задан Jaanus 27 January 2010 в 05:10
поделиться

2 ответа

Обычно, когда вы вручную прикручиваете иерархию представлений, вы не получите -viewWillAppear:, -viewDidAppear и т.д. Они вызываются различными SDK методами, такими как -pushViewController:animated:, -presentModalViewController:animated:, и UITabBarController, когда выбрана вкладка.

Когда вы сами добавляете вид в иерархию, он может отображаться на экране, а может и не отображаться на экране; метод -addSubview: не делает никаких предположений о ваших намерениях. Просто назовите их сами, когда будете добавлять вид.

10
ответ дан 18 December 2019 в 13:14
поделиться

Первое, что вы должны знать, это то, что ViewDiDiDAppear - это метод UiviewController, а не UIView, на самом деле не имеет ничего общего с видами.

Второе, что может быть только один «активный» UiviewController за раз.

Когда вы добавляете «A» VICK в окно, он становится активным UiviewController, и только «A» получит сообщениеDiDAppear Message, пока «E» на самом деле не будет получать методы, связанные с UIViewContoller (ViewDiDiDAppear, ViewWillAppear и т. Д. )

Как упоминается @noah, когда вы используете PushViewController, вы получите эти сообщения, поскольку метод приводит к тому, что способ нажатой контроллера представления стал «активным» UiviewController.

Мое предложение для вас - это то, что если вы создаете контроллеры для представлений, которые являются подваими, не подклассьте UiviewController, а скорее nsobject, он уменьшит уровень путаницы, поскольку вы не будете ожидать, что ваши методы UIViewController вызывают, которые они не будут в любом случае.

3
ответ дан 18 December 2019 в 13:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: