JMMaskTextField
在我的 JavaScript 时代(哦,那是多么黑暗的年代)给输入字段应用掩码非常简单,只需使用某种 jQuery 插件将掩码设置为类似 (999) 999-9999 的格式即可,这样一来,您就有一个为电话号码设计的很好看的带掩码的输入字段。我从未在 iOS 上找到过这样简单的东西。有些库要求您编写正则表达式模式和其它疯狂的东西。当然,对于更复杂的情况,这可能会很有用,但我只是想要简单直接的东西。正是出于这种需要,才出现了 JMMaskTextField
。
JMMaskTextField
允许您通过简单地设置一个掩码模式字符串来掩码您的 UITextField
。掩码字符是
A
代表字母0
代表数字
所以,对于一个巴西车牌,它有3个字母,一个短横线,然后是4个数字,掩码将是: AAA-0000
。
JMMaskTextField
还处理粘贴、中间插入和删除。
安装
CocoaPods
您可以使用 CocoaPods 安装 JMMaskTextField
- 将以下行添加到您的 Podfile 中
pod "JMMaskTextField-Swift"
- 运行
pod install
手动
只需将 JMMaskTextField 文件夹放入你的项目中,你就设置好了!
用法
功能分为两个类
JMStringMask
- 所有字符串遮盖功能。您可以在JMMaskTextField
之外使用此功能。JMMaskTextField
-UITextField
的子类,处理所有编辑事件。使用一个JMStringMask
的实例。
界面构建器
在身份检查器中将文本字段的类设置为 JMMaskTextField
。然后在属性检查器中设置您的掩码。就这样!
代码
初始化一个 JMMaskTextField
的实例并设置掩码属性
let maskTextField = JMMaskTextField(frame: CGRect.zero)
maskTextField.maskString = "(00) 0 0000-0000"
就这样!
JMStringMask
您可以在文本字段之外使用字符串遮盖功能。使用也很简单
let mask = JMStringMask(mask: "00000-000")
let maskedString = mask.mask(string: "30310360") // returns "30310-360"
let unmaskedString = mask.unmask(string: maskedString) // returns "30310360"
编辑时更改掩码
在巴西我们遇到了一个问题:手机号码是9位数字(直到最近并非所有手机号码都是9位数字),而固定电话是8位数字。这给号码隐藏带来了问题。JMMaskTextField
支持在编辑时更改掩码。所以当我们识别到用户输入了9位数字时,我们将掩码切换到更长的格式。如果他们删除了一位数字,我们就回到原始的掩码。以下是一个例子
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text as NSString? else { return true }
let newText = text.replacingCharacters(in: range, with: string)
let maskTextField = textField as! JMMaskTextField
guard let unmaskedText = maskTextField.stringMask?.unmask(string: newText) else { return true }
if unmaskedText.count >= 11 {
maskTextField.maskString = "(00) 0 0000-0000"
} else {
maskTextField.maskString = "(00) 0000-0000"
}
return true
}
作者
许可协议
JMMaskTextField在MIT许可协议下可用。有关更多信息,请参阅LICENSE文件。