作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有两个 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/
我尝试在 d3.js 中进行链式转换。为此,我在数组中定义了一组转换,并(尝试)创建一个函数以使用 .each("end", function()) 递归调用它们,以在前一个为完成,但我还没有结果。
我是一名优秀的程序员,十分优秀!