我有textField
用户输入的电子邮件地址。我想在输入文本成为有效的电子邮件地址的瞬间激活提交按钮。
验证有效,但shouldChangeCharactersInRange
中的代码似乎在用户输入后面执行了一步。因此,当电子邮件有效时,用户仍然需要在按钮更改之前再点击一个键。同样,如果电子邮件地址无效,则按钮不会更改,直到再点击一个键。
请注意,这也发生在设备上,而不仅仅是在模拟器中。
代码如下:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) {
if emailIsValidFormat(textField.text) {
emailSubmitButton.alpha = 1
} else {
emailSubmitButton.alpha = 0.4
}
}
答案 0 :(得分:2)
调用此方法时,文本尚未更改。您必须使用range
和replacementString
来构建电子邮件地址,然后验证。
答案 1 :(得分:2)
将文本字段的“编辑已更改”事件连接到视图控制器中的操作可能更简单,而不是实现textField:shouldChangeCharactersInRange:replacementString:
。文本字段在更新其textField:shouldChangeCharactersInRange:replacementString:
属性之前发送text
,但在更新其{{1}后发送“编辑已更改”事件属性。
示例:
答案 2 :(得分:1)
将您的代码移到另一个地方,让我们调用它:
func validateEmail(emailTextField: UITextField) -> Bool
这里重要的部分:
yourTextField.addTarget(self, action: "validateEmail:", forControlEvents: .EditingChanged)
或.ValueChanged
validateEmail:
。