Swift isFirstResponder为true但游标未设置

时间:2018-02-05 12:39:10

标签: ios swift first-responder becomefirstresponder

我有一个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语句中没有按预期工作吗?

0 个答案:

没有答案