我面临着关于空白空间的两个问题。
我有这个信用卡掩码: "[0000] [0000] [0000] [0000] [999]"
但主要问题是当用户完成输入必填数字时,它仍然说未完成,因为用户没有在[999]
之前输入空格。 我该如何解决这个问题?
我有这个名称输入掩码: [A…]
但它不允许我输入空格,而且似乎没有符号。 我什至尝试为空白创建自定义符号,但没有成功。 如何允许至少一个字母和可选的空格?
感谢这个很棒的图书馆!
嘿@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
为文本和提取的值提供了一系列计算指标,如acceptableTextLength
、 totalTextLength
等。
在您的情况下, MaskedTextFieldDelegate.acceptableValueLength()将返回16
,因此您可以将提取的值的长度与它进行比较,以便定义输入完成。
为了定义行为, 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
。