Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 单击按钮并执行其他UI任务_Ios_Swift_Ios8_Xcode6 - Fatal编程技术网

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

Ios 单击按钮并执行其他UI任务,ios,swift,ios8,xcode6,Ios,Swift,Ios8,Xcode6,当用户点击一个按钮时,我想检查我的用户名/密码文本框是否有效(包含文本),如果无效,在每个框旁边画一个红色的x。如果它是有效的(用户提供了用户名/密码),那么我想使用标识符执行一个segue 当我尝试这个并点击按钮时,一切都冻结了。如果我进行了验证,然后将ui更新包装为异步,它将不再在视觉上锁定按钮(但我仍然无法单击它)。我肯定我错过了一些对GCD至关重要的东西,但有人能帮我吗?我觉得无论我尝试什么,一切都会锁定,我的图标不会出现/表单冻结/无响应。谢谢 @IBAction func btnL

当用户点击一个按钮时,我想检查我的用户名/密码文本框是否有效(包含文本),如果无效,在每个框旁边画一个红色的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
     }
}
我确定(正如用户所说)这与异步线程或ui线程无关,因为我试图在密码字段上执行此操作:

 txtPassword.rightViewMode = UITextFieldViewMode.Always
这似乎锁定了线程,但并没有抛出错误,这很奇怪。
我将避免这种情况。

您不需要在此处使用GCD来更新UI。您是否在发布的方法中遗漏了任何内容?似乎该方法的“冻结”用户界面中的某些内容。。。通常情况下,UI会在方法结束时更新,但由于它在GCD块中更新,因此您似乎在方法结束前“冻结”。当您输入正确的用户名/密码时,应用程序是否能够导航到下一个view controller?您不需要isFormValid属性。定义一个else来调用viewcontroller。同时删除dispatch_async并将nslog添加到if和else,然后检查应用程序是否冻结。(self.txtPassword.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count==0)这似乎是问题所在,特别是密码字段有可能出错吗?