按钮单击并执行其他UI任务

时间:2014-12-26 16:23:37

标签: ios swift ios8 xcode6

当用户点击按钮时,我想检查我的用户名/密码文本框是否有效(包含文本),如果没有,请在每个框旁边绘制一个红色的x。如果它有效(用户提供了用户名/密码),那么我想执行带标识符的segue。

当我尝试这个并单击按钮时,一切都冻结了。如果我进行验证然后将ui更新包装在异步中,它就不会在视觉上锁定按钮(但我仍然无法点击它)。我确定我遗漏了一些对GCD至关重要的东西,但有人可以帮助我吗?我觉得无论我尝试什么,一切都锁定,我的图标不会出现/形成变得冻结/反应迟钝。谢谢!

 @IBAction func btnLoginTapped(sender: UIButton) {

    //Reset validation
    txtUsername.rightView = nil
    txtPassword.rightView = nil
    var isFormValid = true
    var errorImageView = UIImageView(image: UIImage(named: ("redx")))
    errorImageView.frame = CGRectMake(5, (view!.frame.size.height - 20) / 2, 20, 20)
    errorImageView.contentMode = UIViewContentMode.Center

    if ((self.txtUsername.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0) || (self.txtPassword.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0)) {

        isFormValid = false

        dispatch_async(dispatch_get_main_queue()) {
            if (self.txtUsername.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0) {
                self.txtUsername.rightView = errorImageView
                self.txtUsername.rightViewMode = UITextFieldViewMode.Always
            }
            if (self.txtPassword.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0) {
                self.txtPassword.rightView = errorImageView
                self.txtPassword.rightViewMode = UITextFieldViewMode.Always       
            }
        }
    }



    if (isFormValid) {
        ..do other stuff, potentially also a segue with identifier
     }
}

1 个答案:

答案 0 :(得分:0)

我确定(正如用户所说)这与异步或ui线程无关,这是因为我试图在密码字段上执行此操作:

 txtPassword.rightViewMode = UITextFieldViewMode.Always

这似乎锁定了线程但不会抛出错误,奇怪的是。 我会避免这种情况。