2017-08-12 72 views
0

我有一個超類,我稱之爲保護視圖。它根據用戶是否登錄來分離內容。我正在使用FireBase進行用戶驗證。我可以確認用戶是基於我的登錄方法進行身份驗證的,但是當我執行user.removeFromSuperView時,視圖不會消失。我打電話給checkAuthentication()在我的viewdidload超級類的整個功能存在。認證後沒有從所有的視圖中刪除視圖

let bannerView = ForceSignInBanner.instanceFromNib() as! ForceSignInBanner 
bannerView.delegate = self 

if (!AuthenticationService.sharedInstance.isAuthenticated()) { 
    print("Sign them up") 
    self.view.addSubview(bannerView) 

} else if(AuthenticationService.sharedInstance.isAuthenticated()){ 
    bannerView.removeFromSuperview() 
} 

回答

1

你的代碼是必須的,所以它只能在viewDidLoad在視圖控制器的生命週期中不晚調用。爲了正確處理這個問題,你需要使用addStateDidChangeListener。如:

self.bannerView = ForceSignInBanner.instanceFromNib() as! ForceSignInBanner 
bannerView.delegate = self 

handle = Auth.auth().addStateDidChangeListener { [unowned self] (_, user) in 
    if user != nil { 
     self.bannerView.removeFromSuperview() 
    } 
    else { 
     self.view.addSubview(self.bannerView) 
    } 
} 

這種方式在用戶授權狀態發生變化時調用閉包。

+0

什麼或你在哪裏得到處理?你只是宣佈作爲一個變種或讓更早?也感謝您的幫助。 –

+0

'handle'是一個在視圖控制器上聲明的var(和'bannerView'一起)。當你不想再聽時,它被用來「關閉」聽衆。請訪問https://firebase.google.com/docs/auth/ios/start –

+0

瞭解詳情。不,這不起作用,觀點不會消失。 –

相關問題