Проблема нажатия нескольких контроллеров представлений в стек контроллера навигации
Я пытаюсь нажать три контроллера вида на контроллер навигации.
[self.navigationController pushViewController:one animated:YES];
[self.navigationController pushViewController:two animated:YES];
[self.navigationController pushViewController:three animated:YES];
Желаемое поведение состоит в том, что вид три будет отображаться, и когда нажата кнопка "Назад", он перейдет к просмотру двух, а затем для просмотра одного...
Что на самом деле происходит, так это то, что вид один виден, а нажатие назад - просмотр двух, а затем назад - просмотр. То есть показано, что вид показан один, а не три.
Очень странно, глядя на массив viewController навигационного контроллера после того, как вышеперечисленные вызовы отображают правильные записи, и просмотр свойства visibleViewController
показывает, что он имеет три вида в нем... хотя вид один видна.
Если я перейду к суб-представлению из видимого вида (который отображается на месте просмотра три) и нажмите обратно из этого подматрица... он перейдет к просмотру трех.
Похоже, что он показывает один вид, но знает, что он на виду три...
Я полностью смущен... любые идеи?
Джим
Ответы
Ответ 1
Для первых двух нажатий не передавайте анимированный флаг как YES, установите для него значение NO:
[self.navigationController pushViewController:one animated: NO];
[self.navigationController pushViewController:two animated: NO];
[self.navigationController pushViewController:three animated: YES];
Это даст вам эффект, который вы хотите. В противном случае вы запутываете систему анимации, поскольку она пытается анимировать три представления в одном и том же пространстве.
Ответ 2
Проблема с наиболее актуальным ответом заключается в том, что один и два будут видны за долю секунды, пока третий не станет видимым. Не большая проблема, но это не произведет на пользователя хорошее впечатление. Решение, которое вы ищете:
NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:one];
[controllers addObject:two];
[controllers addObject:three];
[self.navigationController setViewControllers:controllers animated:YES];
Это будет анимироваться в трех случаях, когда один или два не станут видимыми в процессе.