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

Swift - resetting vc in nav controller that is embedded in tab bar

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

customerViewController 是嵌入在标签栏控制器中的导航控制器中的初始视图控制器。我有一个 tabBarController class 是 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 在上面的代码中为 nil。我可以参考 viewControllers,它给了我一个选项卡栏 viewController 列表,但我不确定如何从那里到导航控制器。

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

您可以在 viewWillAppear(_:)

中的 vc 中重置表单值
class ViewController: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
       //clear the textfields, textviews values etc. here. 
    }
}

事实证明,我试图访问 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)
            }
        }
    }