我有一个带有两个 UITableViewCells
的 View Controller ,每个单元格都包含一个 UITextField
。在我的导航栏中,我有一个名为“保存”的右栏按钮,除非两个文本字段都包含文本,否则该按钮将被禁用。保存按钮的默认状态是禁用的。从禁用到启用的转换工作正常,但当其中一个文本字段为空时禁用该按钮很困难。
我目前正在做以下事情:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if title == "Password"{
if textField.tag == 1{
if (textField.text?.isEmpty)!{
passwordField1Empty = true
}
else {
passwordField1Empty = false
}
}
else if textField.tag == 2 {
if (textField.text?.isEmpty)! {
passwordField2Empty = true
}
else {
passwordField2Empty = false
}
}
if passwordField1Empty == false && passwordField2Empty == false {
self.navigationItem.rightBarButtonItem?.isEnabled = true
}
else {
self.navigationItem.rightBarButtonItem?.isEnabled = false
}
}
else {
self.navigationItem.rightBarButtonItem?.isEnabled = true
}
return true
}
导致问题的原因是,如果用户返回并一一删除文本字段中的每个字符,则每次都会调用 textField.text?.isEmpty
。当还剩最后一个字符时,textField.text?.isEmpty
将在删除最后一个字符之前被调用,因此最终返回 false。除非用户再次按下删除按钮,否则即使没有任何内容可删除,textField.text?.isEmpty
也不会返回 true。
最佳答案
发生这种情况是因为您正在覆盖
shouldChangeCharactersIn()
方法,该方法在添加/删除实际字符之前被调用。因此,如果您想捕获用户删除最后一个字符的情况,您有两个选择:
- 您可以将
if (textField.text?.isEmpty)
替换为if (textField.text?.characters.count == 1 && replacementString == "")
. 您还可以在
if 语句
之前更新字符串,如下所示:let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
之后您可以检查
if (newString.isEmpty)
。
关于ios - 逐个删除字符后判断UITextfield是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42284292/