登录屏幕消失并在登录失败时重新出现

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 的调用。这就是告诉应用程序关闭登录视图的原因。在设计只有错误并且希望关闭按钮删除警报的警报时,您不必在完成中放入任何代码。

【讨论】:

以上是关于登录屏幕消失并在登录失败时重新出现的主要内容,如果未能解决你的问题,请参考以下文章

paypal IOS sdk登录失败

12306登录显示操作失败请检查时间设置是啥意思?

loadrunner 当有用户登录失败时,重新执行登录脚本

Autodesk 登录 - 每次登录时授权应用程序屏幕

VB:重新加载SqlDataSource时,'user'登录失败

Firebase for Flutter 登录构建失败