В IOS 4.x или ниже метод viewDidAppear не вызывается при добавлении подпредставления в представление, почему? - PullRequest
10 голосов
/ 11 ноября 2011

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

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

Заранее спасибо, Мрунал

Ответы [ 2 ]

3 голосов
/ 28 декабря 2012

Для 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 голосов
/ 08 февраля 2012

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

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

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

...