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.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)
}
}
}
我有一个 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(_:)
、
class ViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
//clear the textfields, textviews values etc. here.
}
}
事实证明,我试图访问 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)
}
}
}