认证后没有从所有的视图中删除视图
问题描述:
我有一个超类,我称之为保护视图。它根据用户是否登录来分离内容。我正在使用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()
}
答
你的代码是必须的,所以它只能在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)
}
}
这种方式在用户授权状态发生变化时调用闭包。
什么或你在哪里得到处理?你只是宣布作为一个变种或让更早?也感谢您的帮助。 –
'handle'是一个在视图控制器上声明的var(和'bannerView'一起)。当你不想再听时,它被用来“关闭”听众。请访问https://firebase.google.com/docs/auth/ios/start –
了解详情。不,这不起作用,观点不会消失。 –