В IOS 4.x или более поздней версии метод viewDidAppear не вызывается при добавлении вложенного представления к представлению, почему?

#ios4 #delegates #uiviewcontroller #ios5 #viewwillappear

#ios4 #делегирует #uiviewcontroller #ios5 #viewwillappear

Вопрос:

В iOS 4.x или более поздней версии viewDidAppear и viewWillAppear, viewDidDisappear и viewWillDisappear такие методы делегирования ViewController не вызываются. Те же методы отлично работают с iOS 5.x.

Почему? Является ли это ошибкой в iOS 4.x или более поздней версии. Потому что в iOS 5.x все эти методы вызываются надлежащим образом и в определенной последовательности.

Заранее спасибо, Mrunal

Комментарии:

1. Не могли бы вы объяснить, как вы пришли к его выводу? Регистрируете ли вы что-либо из этих методов, которые отображаются в iOS5, но не в iOS4?

2. Да, я также использовал NSLog и точки останова… Пробовал также на обоих симуляторах, а также на устройстве.

3. Это зависит от вашей иерархии ViewController, то есть от того, как вы управляете своим content ViewController и Container ViewController.

4. что это значит? как управлять иерархией представлений для этого..

Ответ №1:

Для IOS4.x я использую методы делегирования UINavigationController, подобные этому:

 -(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {
        [activeView viewDidAppear:YES];
    }
}
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {
        [activeView viewWillAppear:YES];
    }
}
  

Я надеюсь, что это поможет!

Ответ №2:

Если ваш контроллер представления является дочерним по отношению к другому контроллеру представления (т. Е. это UINavigationController внутри UIViewController или наоборот и т.д.), дочерние методы viewDidAppear, viewWillAppear и т.д. вызываться не будут. Решение состоит в том, чтобы родительский вызов в них выглядел так:

 -(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated];
    [child viewWillAppear:animated];
}
  

Я знаю, что это происходит через iOS 4.3. В iOS 5 появился новый набор методов, специально предназначенных для обработки этих случаев: Реализация контроллера представления контейнера