身份验证后未从所有视图中删除视图

时间:2017-08-12 22:34:51

标签: ios swift firebase firebase-authentication

我有一个叫做受保护视图的超类。它根据用户是否登录来隔离内容。我正在使用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 个答案:

答案 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)
    }
}

这样,只要用户的授权状态发生变化,就会调用闭包。