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

Swift 4中如何为UITextField同时设置字符数与数字输入限制

整合UITextField的数字输入限制与字符数限制

嘿,这两个校验逻辑完全可以合并到同一个代理方法里!下面是完整的实现代码,我会顺便拆解每一部分的作用:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    // 第一部分:仅允许输入数字(包含退格操作,因为退格时replacementString为空)
    let allowedCharacters = CharacterSet.decimalDigits
    let inputCharacterSet = CharacterSet(charactersIn: string)
    // 如果输入的字符不全是数字,直接拒绝
    if !allowedCharacters.isSuperset(of: inputCharacterSet) {
        return false
    }
    
    // 第二部分:限制最大字符数为6
    let maxLength = 6
    guard let currentText = textField.text else { return true }
    let currentString = currentText as NSString
    let newString = currentString.replacingCharacters(in: range, with: string)
    // 替换后的字符串长度不超过6才允许修改
    return newString.count <= maxLength
}

逻辑拆解:

  • 数字校验:用CharacterSet.decimalDigits定义允许的数字字符,然后检查输入的字符串(包括粘贴的内容)是否全部属于这个集合。这里特意允许空字符串,因为用户按退格键时replacementString是空的,要保证删除操作正常。
  • 字符数校验:先计算替换后的新字符串长度,只有当长度≤6时才允许修改,完美覆盖了输入、删除、粘贴等所有场景。

注意事项:

别忘了确保你的文本框已经设置了代理,比如在viewDidLoad里加上:

txt_phone_no_verification_code.delegate = self

同时你的视图控制器要遵守UITextFieldDelegate协议哦。

内容的提问来源于stack exchange,提问作者mannyCalavera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:20