FormTextField
这是一个 UITextField
子类,支持对有效和无效输入的样式,以及格式化器,可以轻松地格式化信用卡号码、电话号码等。它支持输入验证器,因此可以限制 UITextField 的内容,使用最大长度、最大值或正则表达式(用于验证电子邮件)。
目录
原生演示
自定义演示
样式
FormTextField 也支持使用 UIAppearance 协议进行样式设置。 上例展示了如何使用此方法进行样式设置。
输入验证器
InputValidator
对象允许您通过设置一些规则来验证一个值,默认的 InputValidator
允许您进行以下验证:
- 必填(非空)
- 最大长度
- 最小长度
- 最大值
- 最小值
- 有效字符
- 格式(正则表达式)
例如,如果您有一个只想允许介于 5 和 6 之间的值的 FormTextField,您可以这样做
let validation = Validation()
validation.minimumValue = 5
validation.maximumValue = 6
formTextField.inputValidator = InputValidator(validation: validation)
Typing 4 => Invalid
Typing 5 => Valid
Typing 6 => Valid
Typing 7 => Invalid
FormTextField
包含 3 个内置输入验证器
-
CardExpirationDate: 验证 MM/YY,其中 MM 代表月份,YY 代表年份。MM 不应大于 12,年份可以为当前年份以上的任何数字(这确保卡片未过期)。
-
Decimal: 验证值是否为数字,允许使用逗号和点作为小数分隔符。
-
Required: 用于最小长度为 1 的便捷输入验证器。
创建自己的输入验证器
InputValidator
包含 InputValidatable
协议。任何符合此协议的类都可以视为输入验证器。例如,创建一个只允许字母的 InputValidator 可能像这样简单。
public struct LetterInputValidator: InputValidatable {
public var validation: Validation?
public init(validation: Validation? = nil) {
self.validation = validation
}
public func validateReplacementString(replacementString: String?, fullString: String?, inRange range: NSRange?) -> Bool {
var valid = true
if let validation = self.validation {
let evaluatedString = self.composedString(replacementString, fullString: fullString, inRange: range)
valid = validation.validateString(evaluatedString, complete: false)
}
if valid {
let composedString = self.composedString(replacementString, fullString: fullString, inRange: range)
if composedString.count > 0 {
let letterCharacterSet = NSCharacterSet.letterCharacterSet()
let stringCharacterSet = NSCharacterSet(charactersInString: composedString)
valid = letterCharacterSet.isSupersetOfSet(stringCharacterSet)
}
}
return valid
}
}
formTextField.inputValidator = LetterInputValidator()
Typing A => Valid
Typing 2 => Invalid
Typing AA => Valid
Typing A7 => Invalid
格式化器
Formatter
对象是使用 Formattable
协议实现的特定格式形式的对象。默认情况下,FormTextField
包含两个 Formatter
:
CardExpirationFormatter: 将数字格式化为 MM/YY 规范,其中 MM 是月份,YY 是年份。
CardNumberFormatter: 将数字格式化为每 4 位数字加分隔符,例如将 1234567812345678 格式化为 1234 5678 1234 5678。
自定义格式化程序
为 FormTextField
创建自定义 Formatter
应该就像创建一个遵循 Formattable
协议的类一样简单,也就是实现以下方法。
func formatString(_ string: String, reverse: Bool) -> String
安装
FormTextField 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中。
pod 'FormTextField'
许可
FormTextField 遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。
作者
Elvis Nuñez, @3lvis