我有一个叫做受保护视图的超类。它根据用户是否登录来隔离内容。我正在使用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()
}
答案 0 :(得分: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)
}
}
这样,只要用户的授权状态发生变化,就会调用闭包。