You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:05:15