Input-mask-ios: 空格问题

创建于 2018-05-24  ·  6评论  ·  资料来源: RedMadRobot/input-mask-ios

我面临着关于空白空间的两个问题。

  1. 我有这个信用卡掩码: "[0000] [0000] [0000] [0000] [999]"但主要问题是当用户完成输入必填数字时,它仍然说未完成,因为用户没有在[999]之前输入空格。 我该如何解决这个问题?

  2. 我有这个名称输入掩码: [A…]但它不允许我输入空格,而且似乎没有符号。 我什至尝试为空白创建自定义符号,但没有成功。 如何允许至少一个字母和可选的空格?

感谢这个很棒的图书馆!

feature request question

所有6条评论

嘿@caioremedio!
感谢您的提问。 我已经看到一个潜在的功能请求。

首先,对于您的"[0000] [0000] [0000] [0000] [999]"信用卡掩码自定义符号可能是您的答案。 您需要一个可选的空格字符,如下所示:

"[0000] [0000] [0000] [0000][s][999]"

Notation(character: "s", characterSet: CharacterSet(charactersIn: " "), isOptional: true)

- 请尝试一下,让我知道你的结果。

其次,我注意到Compiler一个逻辑缺陷。 现在,我们的库尝试根据前一个字符继承[…]的特征,并且它不支持此前一个字符的

我需要根据您的需要更新库,好吗?

@taflanidi ,感谢您的快速回复。

首先:我尝试使用[s]但它不是自动插入空格字符。 我在这里遗漏了什么?

我正在使用MaskedTextFieldDelegate子类,我为customNotations创建了一些自定义初始化:

class NotifyingMaskedTextFieldDelegate: MaskedTextFieldDelegate {

    weak var editingListener: NotifyingMaskedTextFieldDelegateListener?

    override init(format: String) {
        super.init(format: format)
    }

    convenience init(format: String, customNotations: [Notation]) {
        self.init(format: format)
        self.customNotations = customNotations
    }

    convenience init(format: String, customNotation: Notation) {
        self.init(format: format, customNotations: [customNotation])
    }
}

初始化:

NotifyingMaskedTextFieldDelegate(
    format: "[0000] [0000] [0000] [0000][s][999]",
    customNotation: Notation(character: "s",
                             characterSet: CharacterSet(charactersIn: " "),
                             isOptional: true))

第二:好的,但是可以在编译器中只包含空格(以及数字和字母)?

感谢您的支持。

@caioremedio

我试过 [s] 但它不是自动插入空格字符。 我在这里遗漏了什么?

哦,我忘记了。 我什至在自定义符号自述部分的末尾提到了它。

我正在使用 MaskedTextFieldDelegate 的子类,我为 customNotations 创建了一些自定义初始化

实际上,您不需要子类化。 MaskedTextFieldDelegate一个相应的公共变量customNotations ,您只需将您的符号列表分配给它。

此外,现在我看到使用这种方法,您将获得另一个提取值的问题。 具体来说,这个问题: 1234123412341234 999 — 一个不必要的空间。

但是,您可以采用另一种方法来定义完整的值。 Mask实例和包装器MaskedTextFieldDelegate为文本和提取的值提供了一系列计算指标,如acceptableTextLengthtotalTextLength等。

在您的情况下, MaskedTextFieldDelegate.acceptableValueLength()将返回16 ,因此您可以将提取的值的长度与它进行比较,以便定义输入完成。


  1. > 好的,但可以在编译器中只包含空格(以及数字和字母)?

为了定义行为, Compiler需要知道省略号前面字符的性质:

[A…]
 ^ this one defines, what symbols are accepted

目前, Compiler仅限于A a 0 9 - _的基本集合。 当涉及椭圆蒙版时,自定义符号不起作用,这是一个要实现的功能。

哦,我忘记了。 我什至在自定义符号自述部分的末尾提到了它。

哦,糟糕,没有注意到这一点。

实际上,您不需要子类化。 MaskedTextFieldDelegate 有一个相应的公共变量 customNotations,您只需将您的符号列表分配给它。

不,我不只是为了自定义符号而子类化,我正在使用其他方法(覆盖UITextField方法)。 我刚刚评论说,因为我认为自动完成不起作用是一个错误,所以我只是写了我正在做的一切。

在您的情况下,MaskedTextFieldDelegate.acceptableValueLength() 将返回 16,因此您可以将提取的值的长度与它进行比较,以定义完成输入。

太棒了,像魅力一样工作。 所以改为检查是否completed == true ,现在我应该依靠value.count > MaskedTextFieldDelegate.acceptableValueLength()对吗? 我在这里测试过,似乎适用于所有情况。

当涉及椭圆蒙版时,自定义符号不起作用,这是一个要实现的功能。

明白了。 与此同时,将为此使用默认的UITextFieldDelegate

为了定义行为,Compiler 需要知道省略号前面字符的性质:

哦,我的意思是,不要使用省略号实现自定义符号(如果需要太多工作),只需实现空格字符。

再次感谢!

@caioremedio

太棒了,像魅力一样工作。 所以改为检查是否完成 == 真,现在我应该依靠 value.count > MaskedTextFieldDelegate.acceptableValueLength() 对吗?

是的。

哦,我的意思是,不要使用省略号实现自定义符号(如果需要太多工作),只需实现空格字符。

事实上,在这里使用自定义符号会减少我们的工作量。

明白了。 与此同时,将为此使用默认的 UITextFieldDelegate。

请继续关注本周末的Compiler更新。

@caioremedio

好的,现在椭圆蒙版也支持自定义符号。

查看最新的3.4.1

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

beltik picture beltik  ·  6评论

MrJox picture MrJox  ·  11评论

DamascenoRafael picture DamascenoRafael  ·  4评论

LinusGeffarth picture LinusGeffarth  ·  4评论

osterlind picture osterlind  ·  3评论