登录屏幕消失并在登录失败时重新出现
Posted
技术标签:
【中文标题】登录屏幕消失并在登录失败时重新出现【英文标题】:Login screen dismissed and reappears on failed login 【发布时间】:2016-01-19 20:59:51 【问题描述】:我的应用的初始视图控制器是 HomeView,它显示对用户很重要的信息。如果用户未登录,用户界面将显示 LoginView 视图控制器,提示用户登录。
问题是当用户输入不正确的登录凭据、点击登录时,应用程序会出现错误。清除错误后,应用程序会关闭 LoginView,然后再次显示 LoginView。行为应该只是警报,然后离开 LoginView。
1) 从 HomeView(初始视图控制器)
override func viewWillAppear(animated: Bool)
if (PFUser.currentUser()?.username == nil)
dispatch_async(dispatch_get_main_queue(), () -> Void in
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("LoginView")
//self.showViewController(viewController, sender: self)
self.presentViewController(viewController, animated: true, completion: nil)
)
2) 从 LoginView 验证用户凭据,然后通过解析尝试登录。
@IBAction func loginButton(sender: AnyObject)
let username = usernameField.text?.lowercaseString
let password = passwordField.text
if username == "" || password == ""
displayAlert("Error in form", message: "Please enter a username and password")
else if username?.characters.count < 5
self.displayAlert("Failed Signup", message: "Username must be greater than 5 characters")
else if password?.characters.count < 8
self.displayAlert("Failed Signup", message: "Password must be greater than 8 characters")
else
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
PFUser.logInWithUsernameInBackground(username!, password: password!, block: (user, error) -> Void in
//Kill spinner
self.activityIndicator.stopAnimating()
UIApplication.sharedApplication().endIgnoringInteractionEvents()
if ((user) != nil)
dispatch_async(dispatch_get_main_queue(), () -> Void in
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("HomeView")
self.presentViewController(viewController, animated: true, completion: nil)
)
else
self.displayAlert("Failed Signup", message: "\(error)")
)
编辑:
3) displayAlert 功能
func displayAlert(title: String, message: String)
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction((UIAlertAction(title: "OK", style: .Default, handler: (action) -> Void in
self.dismissViewControllerAnimated(true, completion: nil)
)))
self.presentViewController(alert, animated: true, completion: nil)
我应该注意,我的主视图控制器是带有侧边栏菜单的 SWRevealViewController 的一部分。 SWRevealViewController 的导航控制器作为初始视图控制器
【问题讨论】:
你能发布你的displayAlert
函数吗?
@pbush25 编辑问题以添加 displayAlert 功能
【参考方案1】:
您需要在按钮的完成中删除对self.dismissViewController
的调用。这就是告诉应用程序关闭登录视图的原因。在设计只有错误并且希望关闭按钮删除警报的警报时,您不必在完成中放入任何代码。
【讨论】:
以上是关于登录屏幕消失并在登录失败时重新出现的主要内容,如果未能解决你的问题,请参考以下文章