Swift - сброс vc в навигационном контроллере, который встроен в панель вкладок - PullRequest
0 голосов
/ 03 мая 2019

У меня есть customerViewController, который имеет простую форму. Когда пользователь нажимает «Отправить», запускается переход, и появляется другое представление. Проблема возникает, когда пользователь возвращается к customerViewController и находит всю старую информацию все еще там. Я мог бы просто сбросить поля формы, но мне бы очень хотелось найти способ сбросить весь VC. Из того, что я узнал до сих пор, способ сбросить vc, который не был выдвинут, состоит в том, чтобы удалить его и затем добавить обратно.

customerViewController - это начальный контроллер вида в контроллере навигации, который встроен в контроллер панели вкладок. У меня есть tabBarController класс, который UITabBarControllerDelegate. Вот где я звоню:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {  
   if item.tag == 2 {   //This is the tab with my navigation controller
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "CustomerVCID")
        var viewcontrollers = self.navigationController?.viewControllers

        viewcontrollers?.removeFirst()
        viewControllers?.insert(vc, at: 0)
        self.navigationController?.setViewControllers(viewcontrollers!, animated: true) 
}

Проблема с моим кодом в том, что navigationController?.viewControllers равен нулю в коде выше. Я могу сослаться на viewControllers, который дает мне список viewControllers панели вкладок, но я не уверен, как добраться оттуда до контроллера навигации.

Полагаю, мой вопрос в том, что если я на правильном пути, как мне ссылаться на контроллеры представления в моем контроллере навигации?

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Оказывается, я слишком усложнял вещи, пытаясь получить доступ к navigationController.viewControllers или tabBarController.viewControllers.Все, что мне нужно было viewControllers, которое является свойством UITabBarController, которое содержит массив контроллеров, связанных с каждой вкладкой:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    if item.tag == 2 {  //tab with navigation controller
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vcon = storyboard.instantiateViewController(withIdentifier: "CustomerVCID")

        for viewcontroller in viewControllers! {
            if let vc = viewcontroller as? UINavigationController {
                vc.viewControllers.removeFirst()
                vc.viewControllers.insert(vcon, at: 0)
                vc.setViewControllers(vc.viewControllers, animated: true)
            }
        }
    }
0 голосов
/ 03 мая 2019

Вы можете сбросить значения формы в vc внутри viewWillAppear(_:),

class ViewController: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
       //clear the textfields, textviews values etc. here. 
    }
}
...