Проблема с переносом нескольких контроллеров представления в стек контроллера навигации - PullRequest
16 голосов
/ 12 апреля 2010

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

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

Желаемое поведение - показывать три вида, а когда нажата кнопка «Назад», они переходят к двум, а затем к одному ...

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

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

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

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

Я совершенно сбит с толку ... есть идеи?

Jim

Ответы [ 2 ]

35 голосов
/ 12 апреля 2010

Для первых двух нажатий не передавайте анимированный флаг как YES, установите его в NO:

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

Это даст вам эффект, который вы хотите. В противном случае вы путаете систему анимации, поскольку она пытается анимировать три представления в одном и том же пространстве.

14 голосов
/ 11 февраля 2015

Проблема с текущим ответом с наибольшим количеством голосов состоит в том, что один и два будут видны в доли секунды, прежде чем третий станет видимым. Не большая проблема, но это не произведет хорошего впечатления на пользователя. Решение, которое вы ищете:

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:one];
[controllers addObject:two];
[controllers addObject:three];
[self.navigationController setViewControllers:controllers animated:YES];

Это оживит в три без одного или двух становится видимым в процессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...