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
相关产品推荐
相关产品推荐

