gpt4 book ai didi

ios - TabBarController 在调用 popToRootViewController() 后保留其子 Controller

转载 作者:行者123 更新时间:2023-11-29 05:41:51 25 4
gpt4 key购买 nike

我的 Root View 是一个带有 3 个选项卡的 TabBarController:

    -> TabBarController  -> Tab1 (Login)  -> ViewController
-> Tab2 -> NavigationController1 -> ViewController1 (with TextField1) -> ViewController2
-> Tab3 -> NavigationController2 -> ViewController3 (with TextField2) -> ViewController4


注销时,我想要:
1.销毁Tab2和Tab3中Textfield1和Textfield2中所有数据的子 Controller
2.选择Tab1

我尝试调用TabBarController的所有导航 Controller 的popToRootViewController(),之后,我在TabBarController中调用self.selectedIndex = 0。

    fileprivate func popAllNavigationControllersToRoot() {
if let viewControllers = self.viewControllers {
for viewController in viewControllers {
if let navigationController = viewController as? UINavigationController {
navigationController.popToRootViewController(animated: false)
}
}
}
}

@objc func onDidChangeLoginState(_ notification:Notification) {
popAllNavigationControllersToRoot()
self.selectedIndex = 0
}


这工作正常,但是当我在

onDidChangeLoginState(..)
and switch to Tab2 or Tab3, the TextField1/TextField2 contains the old values before calling onDidChangeLoginState(..). It seems that the ViewControllers are not destroying when calling popToRootViewController. Do I something wrong?

I now the best practice would be

  LoginScreen -> TabBarController -> Tab1 ...
-> Tab2 ...
之后重新登录时

但是Tab1内的登录 View 是由PO设置的。

最佳答案

由于 TabBar Controller 保留了 View Controller 对象,因此文本字段值不会自行删除。调用 logout() 时,您可以从两个选项卡中删除文本字段值并重置数据。另一种选择是,当用户登录时,两个选项卡中的文本字段值将设置为空字符串。

关于ios - TabBarController 在调用 popToRootViewController() 后保留其子 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com