如何简单验证iOS TextField输入值范围为1-80?
验证TextField输入值在1-80之间的最简方法
嘿,我来帮你搞定这个输入验证的问题~你之前写的if (Int(impact.text!) != 1...80)有两个主要问题:一是强制解包!很危险,如果用户输入空值或者非数字内容会直接崩溃;二是语法错误,不能直接用!=把可选整数和区间做比较。下面给你两种最简的解决方案:
方案1:点击按钮时验证(最直接)
修改你的button1方法,先安全地解析输入值,再判断是否在1-80区间内,同时加上友好的错误提示:
@IBAction func button1(_ sender: Any) { // 安全解析输入的文本,避免崩溃 guard let impactInput = impact.text, let impactValue = Int(impactInput) else { // 输入不是有效数字时弹出提示 showInputError(message: "请输入1-80之间的有效数字") return } // 检查值是否在1到80的范围内 if !(1...80).contains(impactValue) { showInputError(message: "Impact值必须在1到80之间哦") } else { // 验证通过,执行你需要的逻辑 print("Impact值验证成功!") // 比如这里可以处理数据上传到Firebase等操作 } } // 封装一个复用的提示弹窗方法 private func showInputError(message: String) { let alert = UIAlertController(title: "输入有误", message: message, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "好的", style: .default)) present(alert, animated: true) }
方案2:实时限制输入(更友好)
如果想让用户输入时就不能超出范围,甚至不能输入非数字内容,可以用UITextFieldDelegate来实现实时限制:
步骤1:遵循代理协议
修改你的ViewController类声明:
class TryingOut2Controller: UIViewController, UITextFieldDelegate {
步骤2:设置代理
在viewDidLoad里添加一行代码:
override func viewDidLoad() { super.viewDidLoad() titleLabel.text = postData[myIndex] impact.addTarget(self, action: #selector(textChanged), for: .editingChanged) rigour.addTarget(self, action: #selector(textChanged), for: .editingChanged) response.addTarget(self, action: #selector(textChanged), for: .editingChanged) // 给impact TextField设置代理 impact.delegate = self }
步骤3:实现代理方法
添加下面的方法,限制只能输入数字且值在1-80之间:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // 只允许输入数字和退格键 let allowedChars = CharacterSet.decimalDigits.union(CharacterSet(charactersIn: "\b")) let inputChars = CharacterSet(charactersIn: string) guard allowedChars.isSuperset(of: inputChars) else { return false } // 计算输入后的文本内容 guard let currentText = textField.text else { return true } let newText = (currentText as NSString).replacingCharacters(in: range, with: string) // 空文本允许(比如退格清空的情况) if newText.isEmpty { return true } // 检查新值是否在1-80之间 guard let newValue = Int(newText) else { return false } return newValue >= 1 && newValue <= 80 }
这样用户输入时就只能输入1到80之间的数字,从根源上避免了无效输入~
内容的提问来源于stack exchange,提问作者Kinja
相关产品推荐
相关产品推荐

