我有一个自定义 UITextField,我试图将输入格式化为电话号码作为用户类型。我想要达到的目标:
在 UITextField 上添加前缀
+
符号作为第一个字符,不能删除。将字符串变量和 UITextField 的文本格式化为电话号码格式(+49 291 12345678),而不是用户输入时的纯数字(4929112345678)。
我研究并发现没有内置的方法。我还找到了易于使用的名为PhoneNumberKit的库,用于将输入字符串格式化为电话号码。在 Playground 中,它的工作方式类似于..
let rawNumberArray = "+4929112345678"
let phoneNumbers = PartialFormatter().formatPartial(rawNumberArray)
print(phoneNumbers) // "+49 291 12345678"
请记住,库需要将字符串+
作为第一个字符才能正确格式化。
我尝试在我的 UITextField 上实现它。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
if textField == myTextField {
let candidateString : NSString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let updatedTextString : NSString = PartialFormatter().formatPartial(candidateString as String)
self.formattedPhoneNumber(updatedTextString, textField: textField)
}
return true
}
func formattedPhoneNumber(updatedTextString: NSString, textField: UITextField) {
// textField.text = "+\(updatedTextString as String)"
print(updatedTextString)
}
如果我继续textField.text = "+\(updatedTextString as String)"
评论,print(updatedTextString)
在控制台上打印格式良好的字符串,但在 UI 上的 UITextField 内,它只显示简单的非结构化数字,如“4929112345678”
如果我取消注释,事情开始变得很奇怪,并且 UITextField 开始在 UI 中出现重复的字符,但是用于打印的控制台日志也变得很奇怪。我之前也试过清空textField.text = ""
,但也没有用。
我究竟做错了什么?我错过了什么不能让它正常工作?我相信它与我有关,而不是与图书馆本身有关。
另外,如果您有任何其他建议(或库)让我克服这个问题,请分享。