Ios 逐个删除字符后确定UITextfield是否为空
我有一个带有两个Ios 逐个删除字符后确定UITextfield是否为空,ios,swift3,Ios,Swift3,我有一个带有两个uitableviewcell的视图控制器,每个单元格包含一个UITextField。在我的导航栏中,我有一个名为“保存”的右栏按钮,除非两个文本字段都包含文本,否则该按钮将被禁用。保存按钮的默认状态为禁用。从禁用到启用的转换工作正常,但在其中一个文本字段为空时禁用按钮是很困难的 我目前正在做以下工作: func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replace
uitableviewcell
的视图控制器,每个单元格包含一个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将在删除最后一个字符之前被调用,因此它最终返回falsetextField.text?.isEmpty将不会返回true,除非用户再次按下delete按钮,即使没有要删除的内容 文本字段中有两个字符。用户点击删除。将调用shouldChangeCharactersIn。尚未更改任何内容,并且textField.text?.count==2。返回true,字符将被删除。用户再次点击删除。将再次调用shouldChangeCharactersIn。此时,最后一个字符尚未删除textField.text?.count==1,这就是textField.text?.isEmpty==false的原因。在用户再次尝试编辑文本之前,它不会为真 之所以发生这种情况,是因为您正在重写在添加/删除实际字符之前调用的shouldChangeCharactersIn()
方法。因此,如果要捕捉用户删除最后一个字符的情况,您有两个选项:
您可以将if(textField.text?.isEmpty)
替换为if(textField.text?.characters.count==1&&replacementString==“”)
您还可以在if语句之前更新字符串,如下所示:
let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
在此之后,您可以检查是否(newString.isEmpty)
这就完成了任务,除了newString
没有text
属性-它只是newString.isEmpty
。哦,是的。对不起,弄错了!刚刚编辑了我的答案!