Xcode14 Swift5:如何限制UITextField最多输入3位整数及2位小数
UITextField 数值输入限制实现(3位整数/两位小数)
以下是适配你需求的完整实现代码,替换你原来的textField(_:shouldChangeCharactersIn:replacementString:)方法即可:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // 获取当前输入框文本,为空则用空字符串替代 let currentText = textField.text ?? "" // 计算替换后的新文本 guard let stringRange = Range(range, in: currentText) else { return false } let newText = currentText.replacingCharacters(in: stringRange, with: string) // 禁止输入多个小数点 if newText.components(separatedBy: ".").count > 2 { return false } // 拆分整数和小数部分 let parts = newText.components(separatedBy: ".") // 整数部分最多3位 if let integerPart = parts.first, integerPart.count > 3 { return false } // 小数部分最多2位(存在小数时生效) if parts.count == 2, let decimalPart = parts.last, decimalPart.count > 2 { return false } // 只允许输入数字、小数点和退格键(空字符串对应退格操作) let allowedCharacters = CharacterSet(charactersIn: "0123456789.") let inputCharacterSet = CharacterSet(charactersIn: string) return allowedCharacters.isSuperset(of: inputCharacterSet) }
关键逻辑说明:
- 多小数点拦截:通过拆分字符串统计小数点数量,确保输入框内最多只有一个小数点
- 整数长度控制:拆分后检查整数部分的字符数,超过3位则拒绝输入
- 小数长度控制:若存在小数部分,限制其长度不超过2位
- 合法字符过滤:仅允许数字和小数点输入,避免无效字符干扰
注意:要确保你的ViewController设置了textField.delegate = self,并且遵守UITextFieldDelegate协议,否则上述方法不会被触发。
内容的提问来源于stack exchange,提问作者Hammam Aburaidi
相关产品推荐
相关产品推荐

