2017-08-12 100 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

了解详情。不,这不起作用,观点不会消失。 –