Подтвердить что ты не робот

Проблема нажатия нескольких контроллеров представлений в стек контроллера навигации

Я пытаюсь нажать три контроллера вида на контроллер навигации.

  [self.navigationController pushViewController:one animated:YES];
  [self.navigationController pushViewController:two animated:YES];
  [self.navigationController pushViewController:three animated:YES];

Желаемое поведение состоит в том, что вид три будет отображаться, и когда нажата кнопка "Назад", он перейдет к просмотру двух, а затем для просмотра одного...

Что на самом деле происходит, так это то, что вид один виден, а нажатие назад - просмотр двух, а затем назад - просмотр. То есть показано, что вид показан один, а не три.

Очень странно, глядя на массив viewController навигационного контроллера после того, как вышеперечисленные вызовы отображают правильные записи, и просмотр свойства visibleViewController показывает, что он имеет три вида в нем... хотя вид один видна.

Если я перейду к суб-представлению из видимого вида (который отображается на месте просмотра три) и нажмите обратно из этого подматрица... он перейдет к просмотру трех.

Похоже, что он показывает один вид, но знает, что он на виду три...

Я полностью смущен... любые идеи?

Джим

4b9b3361

Ответ 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];

Это будет анимироваться в трех случаях, когда один или два не станут видимыми в процессе.