0
我有一个登录视图控制器,由各种其他视图控制器调用,需要检查登录状态。他们在viewWillAppear()函数中执行此操作。登录视图控制器有一个带有closeView()函数的导航栏,可在按下时弹出它。Swift3协议委托功能从来没有调用
在这个函数中,我调用委托函数来关闭呈现视图控制器,但是当控制器出现时,它会再次调用检查认证函数。我的委托函数关闭它永远不会被调用。有什么办法可以做到这一点?清楚的是,如果用户通过按下登录控制器上的关闭按钮取消登录,我希望它的呈现视图控制器也关闭。
这个问题似乎是在调用checkAuth()
viewWillAppear()
之前触发我的委托函数。
这是我的代码。
class MyViewController: UIViewController, UserCancelledLoginDelegate {
var delegate : UserCancelledLoginDelegate?
-------
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
callCheckAuth() //loads login controller if not logged in
}
-------------
func shouldCloseView() {
if let navController = self.navigationController {
navController.popViewController(animated: true)
}
}
}
----------
func callCheckAuth() {
// a utility to check auth which works
if response?.statusCode == 200 {
// do stuff
}
else if response?.statusCode == 401 {
self.loadSignInView()
}
protocol UserCancelledLoginDelegate {
func shouldCloseView()
}
class LoginViewController: UIViewController {
var delegate : UserCancelledLoginDelegate?
----------
func closeView() {
delegate?.shouldCloseView()
if let navController = self.navigationController {
navController.popViewController(animated: true)
}
}
您需要在某处设置**委托。 – vadian
把这个callCheckAuth方法也 – KKRocks
如何设置委托和地点?我有另一个代表工作和使用相同的模式,但为了不同的目的。 – markhorrocks