JMMaskTextField-Swift 0.1.3

JMMaskTextField-Swift 0.1.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2018年9月
SPM支持 SPM

Jota Melo 维护。



  • 作者:
  • Jota Melo

JMMaskTextField

CI Status Version License Platform

在我的 JavaScript 时代(哦,那是多么黑暗的年代)给输入字段应用掩码非常简单,只需使用某种 jQuery 插件将掩码设置为类似 (999) 999-9999 的格式即可,这样一来,您就有一个为电话号码设计的很好看的带掩码的输入字段。我从未在 iOS 上找到过这样简单的东西。有些库要求您编写正则表达式模式和其它疯狂的东西。当然,对于更复杂的情况,这可能会很有用,但我只是想要简单直接的东西。正是出于这种需要,才出现了 JMMaskTextField

JMMaskTextField 允许您通过简单地设置一个掩码模式字符串来掩码您的 UITextField。掩码字符是

  • A 代表字母
  • 0 代表数字

所以,对于一个巴西车牌,它有3个字母,一个短横线,然后是4个数字,掩码将是: AAA-0000

JMMaskTextField 还处理粘贴、中间插入和删除。

还有Objective-C版本

安装

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
}

作者

Jota Melo[email protected]

许可协议

JMMaskTextField在MIT许可协议下可用。有关更多信息,请参阅LICENSE文件。