2013-11-02 3 views
1

У меня проблема, похожая на this question, но с другой причиной.UINavigationController back button не подходит к предыдущему VC

У меня есть контроллер навигации с видами A> B> C> D> E.

В C Я нажимаю на D, в котором пользователи «создают новую сессию». Иногда пользователи хотят добавить детали к этому новому сеансу, поэтому они нажимают кнопку добавления, которая нажимает на E.

Когда они не хотят добавлять детали, они нажимают «done» на D, я вызываю [navControler popViewControllerAnimated: YES] ; и они заканчиваются на C без проблемы, упомянутой в вопросе выше, то есть, если на C они нажимают назад, он успешно переходит к B. Однако, когда они добавляют детали, они переходят к E, и когда они заканчиваются, они нажимают кнопку назад ctrl кнопка. В этот момент я добавил этот код, чтобы вернуть их в C:

NSArray *allViewControllers = [[self navigationController] viewControllers]; 
    for (UIViewController *aViewController in allViewControllers) { 
     if ([aViewController isKindOfClass:[TSessionMgmtViewController class]]) { 
      [self.navigationController popToViewController:aViewController animated:NO]; 
     } 
    } 

Они в конечном итоге обратно на C, но когда они ударяют кнопку назад на C, он делает странное назад анимацию, но заканчивается на C снова , Затем повторное нажатие на второй раз возвращает их обратно в B.

Я уже проверил следующее: Я не вызываю дополнительных уведомлений, которые вызывают добавление дополнительного C. Я не нажимаю C каким-либо другим способом Я проверил стек навигационного контроллера с NSLog (@ "контроллер контроллера:% @", [[self navigationController] viewControllers]); и он не показывает дополнительный C в стеке.

Так что это проблема с самой задней кнопкой на C? Или есть какой-то невидимый контроллер вида C, который есть, но не отображается при печати стека?

Большое спасибо!

+2

Где вы добавляли код, который вы опубликовали? Вы не должны изменять поведение кнопки «Назад», если это то, что вы сделали - оно предназначено только для возврата к предыдущему контроллеру, оно не должно пропускать контроллер. Если вы хотите перейти непосредственно с E на C, у вас должна быть специальная кнопка для этого. – rdelmar

+0

@rdelmar Я добавил его в viewWillDisappear of E. – roro

+0

Как я уже сказал в своем комментарии, вы не должны изменять поведение кнопки «Назад» - пользователи ожидают, что они вернут им один контроллер, а не два. Я бы добавил пользовательскую кнопку (в E), чтобы заменить кнопку «Назад», и добавить код, который вы отправили, в свой метод действия, а не поместить его в viewDidDisappear. Я думаю, что это должно сработать. – rdelmar

ответ

0

Вы запрашиваете контроллер nav для списка vcs, но в первый раз, когда вы вызываете поп, они меняются! Вы должны просто выбрать один для поп-музыки. Или используйте вспомогательный подкласс nav и добавьте в него логику, поэтому, когда вы просто набираете верхний контроллер, тот под ним (в своем представленииWillAppear) может запросить, чтобы увидеть, что он должен делать.

Смежные вопросы