UITextField:在输入期间控制最大允许值(数字),有tip提醒 ,然后改变
时间: 2024-02-23 10:59:34 浏览: 202
你可以通过实现`UITextFieldDelegate`协议中的`shouldChangeCharactersIn`方法来控制最大允许值。具体实现如下:
```swift
class ViewController: UIViewController, UITextFieldDelegate {
let maxNumber = 100 // 最大允许值
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// 判断输入的字符是否为数字
let numbers = CharacterSet.decimalDigits
let inputCharacterSet = CharacterSet(charactersIn: string)
if !numbers.isSuperset(of: inputCharacterSet) {
return false
}
// 获取当前输入框中的文本
var text = textField.text ?? ""
// 替换被替换区域的文本
let replaceRange = text.range(from: range)!
text.replaceSubrange(replaceRange, with: string)
// 判断是否超过最大允许值
if let number = Int(text), number > maxNumber {
// 超过最大允许值,给出提示
let alert = UIAlertController(title: "提示", message: "最大允许值为\(maxNumber)", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "确定", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
return false
}
return true
}
}
extension String {
func range(from nsRange: NSRange) -> Range<String.Index>? {
let utf16Start = utf16.index(utf16.startIndex, offsetBy: nsRange.location, limitedBy: utf16.endIndex)!
let utf16End = utf16.index(utf16Start, offsetBy: nsRange.length, limitedBy: utf16.endIndex)!
if let start = utf16Start.samePosition(in: self), let end = utf16End.samePosition(in: self) {
return start..<end
}
return nil
}
}
```
这个实现中,我首先在`viewDidLoad`方法中将`UITextField`的代理设置为当前视图控制器,并设置了最大允许值为100。然后,在`shouldChangeCharactersIn`方法中,我首先判断用户输入的字符是否为数字,如果不是则返回`false`,否则获取当前输入框中的文本,将被替换区域的文本替换为新输入的字符。然后,判断输入框中的数字是否超过最大允许值,如果超过了,就弹出一个提示框告诉用户最大允许值是多少,并返回`false`,否则返回`true`,表示输入有效。同时,我还提供了一个`String`的扩展方法,用于将`NSRange`转换为`Range<String.Index>`。
阅读全文