gpt4 book ai didi

ios - 逐个删除字符后判断UITextfield是否为空

转载 作者:行者123 更新时间:2023-11-29 00:29:22 29 4
gpt4 key购买 nike

我有一个带有两个 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() 方法,该方法在添加/删除实际字符之前被调用。因此,如果您想捕获用户删除最后一个字符的情况,您有两个选择:

  1. 您可以将 if (textField.text?.isEmpty) 替换为 if (textField.text?.characters.count == 1 && replacementString == "").
  2. 您还可以在 if 语句 之前更新字符串,如下所示:

    let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)

    之后您可以检查if (newString.isEmpty)

关于ios - 逐个删除字符后判断UITextfield是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42284292/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com