【问题标题】:How to dynamically mask a text field with swift如何使用 swift 动态屏蔽文本字段
【发布时间】:2019-05-21 14:38:21
【问题描述】:

我正在尝试根据输入的字符数为文本字段使用动态掩码。

我尝试使用 VMaskTextField、AKMaskField,现在我正在使用 InputMask (https://github.com/RedMadRobot/input-mask-ios),我只能使其中一个掩码起作用。我想屏蔽为 ###.###.###-## 或 ##.###.###/####-## 但我无法在用户类型。我关注了两个 wiki 帖子 https://github.com/RedMadRobot/input-mask-ios/wiki/Quick-Starthttps://github.com/RedMadRobot/input-mask-ios/wiki/2.1-Affine-Masks

这是我的实际代码:

 @IBOutlet var btnEntrar: UIButton!
    @IBOutlet var txtCpfCnpj: UITextField!
    @IBOutlet var listener: MaskedTextFieldDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()
        listener.affinityCalculationStrategy = .prefix
        listener.primaryMaskFormat = "[000].[000].[000]-[00]"
        listener.affineFormats = [
            "[00].[000].[000]/[0000]-[00]"
        ]

    }

这是 main.storyboard:

我按照 wiki 帖子中的建议创建了侦听器,现在它正在工作。该字段不接受超过 11 个字符的字符,这对应于第一个掩码 ([000].[000].[000]-[00])

有谁知道如何以任何其他方式或使用某些框架来制作这个动态掩码?

谢谢

【问题讨论】:

    标签: ios swift input-mask


    【解决方案1】:

    InputMask作者在这里。

    MaskedTextFieldDelegate 根据其AffinityCalculationStrategy 在可用掩码之间切换。根据您的代码,您正在使用.prefix 策略,除非最终用户自己键入该点符号,否则它不会成功。

    很遗憾,您目前可用的第二种策略(.wholeString 一种)也无济于事。

    在我看来,基于输入值长度,库目前缺少一个 AffinityCalculationStrategy 似乎很明显。我打算在这个周末添加它,所以请继续关注。

    UPD。关于这个功能,我已经创建了feature request

    【讨论】:

    • 感谢您的回答。我刚刚看到您的功能请求。我最终做了两个面具,但我会得到你的新版本并测试它。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多