将UITextField的最大整数值(而不是字符数)设置为:

6
在Swift中,是否可以将最大INT值设置为UITextField?
我的用例是我有5个文本字段需要具有最大int值。这些值的范围从500到10000不等。五个不同的文本字段中每个都将有一个不同的最大值。我不能使用选择器或下拉菜单,因为增量将为1。而UISlider在数字上的“滑动”会很困难。
如果最大int值为5000,则用户无法键入(在键盘类型的数字键盘上)比5000更高的值。
字符计数不起作用,因为如果最大值为500,则如果我设置为3个字符,用户可以键入999。
2个回答

10

您可以检查文本字段中的当前值是否小于您指定的最大整数值:

(此时您可能希望将键盘类型更改为.NumberPad,以便用户只能输入数字值。)

textField.keyboardType = .NumberPad
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
  let newText = NSString(string: textField.text!).stringByReplacingCharactersInRange(range, withString: string)
  if newText.isEmpty {
    return true
  }
  else if let intValue = Int(newText) where intValue <= self.maxValue {
    return true
  }
  return false
}

我为你创建了一个示例项目。你可以下载并尝试操作。


谢谢!这似乎是我需要的。不过,我的问题是,在maxValue上使用属性观察器有什么好处? - Joe
假设您将最大值从5000减少到2000,而文本输入中的当前值为3000。因此最好清除所有内容并重新开始。 - Ozgur Vatansever
我甚至没有想到那个。太好了。谢谢! - Joe
shouldChangeCharactersInRange 是委托方法,因此您应该首先将 enterIntMax 的委托设置为 VC。textField 会自动传递到该方法中,因此您可以在其中检查 textField == enterIntMax - Ozgur Vatansever
1
搞定了。我只是在viewdidload中添加了enterIntMax.delegate = self。你设置的IBOutlet是textField,它也在委托方法中定义,这就是我的困惑所在。 - Joe
显示剩余2条评论

1
这是针对 Swift 4 及更高版本的更新,确保输入的值为介于 0 到 5000 之间的整数。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string) as String
    if let num = Int(newText), num >= 0 && num <= 5000 {
        return true
    } else {
        return false
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接