我有一个ViewController,它有一个自定义的tableViewCell(当然在tableView中),只有很少的表单字段(4个UITextFields和1个UITextView)。我正在进行一些UI更新以进行验证,例如每个错误textField,边框颜色变为红色。
除了将边框更改为红色外,我还需要将焦点设置为第一个错误字段(使用becomeFirstResponder()
)。这就是我目前在cellForRowAt
方法中所拥有的。
var errorTextFieldArray = [UITextField]()
for myTextField in [(cell as! ContactEmailCell).firstNameTextField, (cell as! ContactEmailCell).nameTextField, (cell as! ContactEmailCell).countryCodeTextField, (cell as! ContactEmailCell).teleNumberTextField, (cell as! ContactEmailCell).emailTextField, (cell as! ContactEmailCell).subjectTextField] as! [UITextField] {
switch myTextField.text?.isEmpty {
case true?:
errorTextFieldArray.append(myTextField)
self.showRedBorder(forTextField: myTextField)
self.allFieldsRequiredAlert()
case false?:
self.removeRedBorder(forTextField: myTextField)
case .none:
break
}
}
if (errorTextFieldArray.count > 0) {
print("errorTextFieldArray count \(errorTextFieldArray.count)")
errorTextFieldArray[0].becomeFirstResponder()
print("is first responder? \(errorTextFieldArray[0].isFirstResponder)")
}
一切运作良好,包括errorTextFieldArray[0].becomeFirstResponder()
语句中的**if**
,但我没有看到光标放在textField中。
当我在.becomeFirstResponder()
开头的任何textField执行cellForRowAt
时,光标将设置为该textField并弹出Keyboard。有人可以帮我理解为什么它在if语句中没有按预期工作吗?