如何快速刷新所有视图控制器

时间:2019-06-19 03:16:51

标签: swift xcode uiviewcontroller

我有一个应用程序,用户一旦登录,他们将保持登录状态,直到注销为止。登录后,会显示一些样式,例如“名称”,以供用户查看。我的问题是,当我以“ user1”身份登录后又注销并以“ user2”身份登录时,视图仍然向用户显示“ user1”。这是因为包含“ user1”的文本是在TabBarController的viewdidload()中设置的,并且当我注销/登录时,不会再次调用viewDidLoad(),因此文本保持不变。再次登录后,是否有一些函数或方法可以在所有ViewController上调用viewDidLoad()?

我尝试使用ViewDidAppear(…),但是我真的不想每次用户单击VC时都调用数据库来接收名称

2 个答案:

答案 0 :(得分:1)

我认为您将要登录。标签栏的导航页面。 loginpage不应处于该层次结构中。 1。您仍然可以通过使用viewwillappear使其成为可能 2.我们可以根据didload进行设置,这是推荐的方法。  为登录页创建单独的导航控制器,并根据所需的业务流程设置窗口rootviewcontroller。这样,一旦您注销,更改wiindow的rootviewcontroller,以便从内存中删除整个tabbar控制器,然后您登录,将根视图控制器更改为tabbarcontroller,现在viewdidload将被称为

答案 1 :(得分:0)

您可以使用 NotificationCenter 并发送自定义通知“登录”。
如果某个对象(例如VC)依赖于User,则该VC需要订阅此通知并更新状态。
文档
https://developer.apple.com/documentation/foundation/notificationcenter
简单的例子
https://medium.com/@JoyceMatos/using-nsnotificationcenter-in-swift-eb70cf0b60fc

以其他方式重置导航堆栈,例如

window.rootViewController = someNewNavigationController