1

Я пытаюсь представить контроллер представления по модулю из стека контроллера навигации, а затем после увольнения вернуться к этому конкретному указателю контроллера. Этот NavigationController находится в пределах UITabBarController.Вернуться к описанию диспетчера навигации после модального увольнения (нет раскадровки)

Мое приложение написано с помощью XIB и программных навигационных контроллеров и контроллеров панели. Я не использую раскадровки. Навигация по навигационному контроллеру все делается с помощью self.navigationController.pushViewController(viewController: TabOnePageTwoViewController, animated: true)

Вот моя конфигурация контроллера.

RootTabBarController ->UINavigationController(rootViewController: TabOneController) ->TabOnePageOneController ->ModalView

Вопрос в том, когда я self.dismiss() внутри модального представлены точки зрения, я вернулся к корню навигационного контроллера вместо представления, который представил модальный , TabOneController

Я думаю, что правильный способ сделать это - выбрать контроллер вида из стека контроллера навигации и popToViewController для правильного.

Для этого я думаю, что в блоке завершения self.dismiss() мне нужно перейти к моему правильному контроллеру.

let viewControllers = self.navigationController!.viewControllers 

    self.dismiss(animated: true, completion: { 
     for aViewController in viewControllers { 
      if(aViewController is TabOnePageTwoViewViewController){ 
       print("navigating back to page one now") 
       self.navigationController!.popToViewController(aViewController, animated: true); 
      } 
     } 
    }) 

`

К сожалению, это не работает. Насколько я могу судить, self.navigationController недоступен изнутри модального вида.

Как я могу вернуться к указателю навигационного контроллера после отклонения представленного модальным способом?

Я загрузил пример приложения к GitHub по следующему адресу: https://github.com/thexande/TabControllerAndNavigationControllerExample

Если вы знаете programatic навигации в пределах IOS хорошо, скачать и посмотреть!

СПАСИБО ВСЕМУ !!

ответ

1

Я посмотрел ваш образец проекта на Github.

Есть только незначительная проблема, почему ваш образец проекта не работает должным образом.

Вы должны настроить навигационную систему в методе RootTabBarViewControllerviewDidLoad, а не viewWillAppear. Это какое-то странное поведение, возможно, ошибка в структуре, я не могу найти никакой документации, почему это должно произойти там, но это так.

Так удалить viewWillAppear и ваш viewDidLoad должен выглядеть следующим образом:

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
     let tabOne = UINavigationController(rootViewController: TabOneViewController()) 
     tabOne.title = "Tab One" 
     let tabTwo = UINavigationController(rootViewController: TabTwoViewController()) 
     tabTwo.title = "Tab Two" 
     self.viewControllers = [tabOne, tabTwo] 
} 
+0

Молодцы, сэр. Ваше решение отлично работает. – thexande