FormTextField 3.1.0

FormTextField 3.1.0

测试已测试
语言语言 SwiftSwift
许可证 NOASSERTION
发布最后一次发布2021年3月
SPM支持 SPM

Elvis Nuñez 维护。



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