我有一个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列表,但是我不确定如何从那里到达导航控制器。
我想我的问题是,假设我处在正确的轨道上,如何在导航控制器中引用视图控制器?
答案 0 :(得分:0)
您可以在viewWillAppear(_:)
内的vc中重置表单值,
class ViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
//clear the textfields, textviews values etc. here.
}
}
答案 1 :(得分:0)
事实证明,我通过尝试访问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)
}
}
}