当用户点击按钮时,我想检查我的用户名/密码文本框是否有效(包含文本),如果没有,请在每个框旁边绘制一个红色的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
}
}
答案 0 :(得分:0)
我确定(正如用户所说)这与异步或ui线程无关,这是因为我试图在密码字段上执行此操作:
txtPassword.rightViewMode = UITextFieldViewMode.Always
这似乎锁定了线程但不会抛出错误,奇怪的是。 我会避免这种情况。