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

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

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

Спасибо заранее, Mrunal

Ответ 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 или наоборот и т.д.), методы childDownAppear, viewWillAppear и т.д. не будут вызваны. Решение состоит в том, чтобы иметь в них родительский вызов:

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

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