簡體   English   中英

如何快速刷新所有視圖控制器

[英]How to refresh all view controllers in swift

我有一個應用程序,一旦用戶登錄,他們就會保持登錄狀態直到注銷。 登錄后,會向用戶顯示一些樣式方面,例如“名稱”。 我的問題是,當我以“user1”身份登錄然后注銷並以“user2”身份登錄時,視圖仍然向用戶顯示“user1”。 這是因為在我的 TabBarController 上的 viewdidload() 中設置了包含“user1”的文本,並且當我注銷/登錄時,不會再次調用 viewDidLoad(),因此文本保持不變。 一旦我再次登錄,是否有一些函數或方法可以在我的所有 ViewController 上調用 viewDidLoad() ?

我試過 ViewDidAppear(...) 但我真的不想在用戶每次點擊 VC 時調用數據庫來接收名稱

我想你要登錄了。 來自 tabbar navigationcontroller 的頁面。 loginpage 不應在該層次結構中。 1 . 您仍然可以通過使用 viewwillappear 2 來實現。我們可以在視圖 didload 中實現,這是推薦的方法。 為 loginpage 制作單獨的導航控制器,並根據需要的業務流程設置窗口 rootviewcontroller。 這樣一旦您注銷,更改 wiindow,s rootviewcontroller 以便整個 tabbar 控制器將從內存中刪除,然后您登錄,將根視圖控制器更改為 tabbarcontroller ,現在將調用 viewdidload

您可以使用NotificationCenter並發送自定義通知“登錄”。
如果某個對象(例如 VC)依賴於 User,則該 VC 需要訂閱此通知並更新狀態。
文檔
https://developer.apple.com/documentation/foundation/notificationcenter
簡單的例子
https://medium.com/@JoyceMatos/using-nsnotificationcenter-in-swift-eb70cf0b60fc

其他方式重置導航堆棧,例如

window.rootViewController = someNewNavigationController

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM