我正在尝试为我的应用编写登录过程。我已将导航控制器嵌入HomeViewController并将其设置为初始ViewController。 如何修复它,以便当用户输入错误的凭据时,HomeViewController根本不会显示?
这就是它正在做的事情:
输入正确的凭据
显示LoginViewController - >用户输入凭据 - >显示HomeViewController
输入了错误的凭据
显示LoginViewController - >用户输入凭据 - >显示HomeViewController - >显示LoginViewController
LoginViewController的代码(查看最后一段代码)
func handlingAuthentication(notification: NSNotification) {
let dict = notification.object as! NSDictionary
if dict["error"]! as! Bool == true {
let errorMessage = dict["message"] as! String
//initialize Alert Controller
let alertController = UIAlertController(title: "Authentication error", message: errorMessage, preferredStyle: .Alert)
//Initialize Actions
let okAction = UIAlertAction(title: "Ok", style: .Default){
(action) -> Void in
self.dismissViewControllerAnimated(true, completion: nil)
}
//Add Actions
alertController.addAction(okAction)
//Present Alert Controller
self.presentViewController(alertController, animated: true, completion: nil)
}
else
{
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn")
NSUserDefaults.standardUserDefaults().synchronize()
self.dismissViewControllerAnimated(true, completion:nil)
}
}
HomeViewController的代码
override func viewDidAppear(animated: Bool) {
let isUserLoggedIn = NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")
if(!isUserLoggedIn){
self.performSegueWithIdentifier("toLoginVC", sender: self)
}
}
更新 我已经尝试将代码块放在ViewDidLoad中,但我仍然遇到同样的问题(实际上现在我已经被困在主页上了)
override func viewDidLoad() {
super.viewDidLoad()
let isUserLoggedIn = NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")
if(!isUserLoggedIn){
self.performSegueWithIdentifier("toLoginVC", sender: self)
}
usernameLabel.text = Data.sharedInstance.userName
getTaskDetails()
displayTask.dataSource = self
}
答案 0 :(得分:0)
如果主视图控制决定并显示登录,您将不可避免地在屏幕上看到它,因为它已经在显示过程中 - 所以它不应该这样做。你应该有一些其他控制器,也许是一个启动视图控制器,它决定显示登录或主视图。
在您的登录视图控制器中,警报OK按钮调用dismiss,这是登录控制器消失并再次重新出现的原因(在显示主控制器一小段时间后)。