Swift-在标签栏中嵌入的导航控制器中重置VC

时间:2019-05-03 06:33:16

标签: swift uinavigationcontroller uitabbarcontroller reset

我有一个customerViewController,它的表单很简单。当用户按下“提交”时,将触发segue,并出现另一个视图。当用户返回到customerViewController并发现所有旧信息仍然存在时,就会出现问题。我可以简单地重置表单字段,但是我真正想要的是找到一种重置整个VC的方法。根据到目前为止的了解,重置尚未推送的vc的方法是先删除它,然后再添加回去。

customerViewController是导航控件中的初始视图控制器,该控件嵌入在标签栏控制器中。我有一个tabBarController的{​​{1}}类。这是我打电话给的地方:

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) } 在上面的代码中为nil。我可以参考navigationController?.viewControllers,该标签为我提供了一个标签栏viewControllers列表,但是我不确定如何从那里到达导航控制器。

我想我的问题是,假设我处在正确的轨道上,如何在导航控制器中引用视图控制器?

2 个答案:

答案 0 :(得分:0)

您可以在viewWillAppear(_:)内的vc中重置表单值,

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

答案 1 :(得分:0)

事实证明,我通过尝试访问navigationController.viewControllerstabBarController.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)
            }
        }
    }