我有一个自定义的UITextField,我试图'格式化输入到电话号码'作为用户类型。我想达到什么:格式化UITextField的文本作为电话号码作为用户类型
添加上的UITextField一个前缀
+
标志作为第一个字符,不能删除。格式二者String变量和的UITextField在电话号码很好(49 291 12345678),而不是普通的数字在(4929112345678)作为用户类型的格式的文本。
我研究发现,没有内置的方法。我还找到了一个易于使用的库,名为PhoneNumberKit,用于将输入字符串格式化为电话号码。在游乐场,它就像..
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)
打印格式良好的控制台上的字符串,但里面的UITextField的UI,它只是显示简单的,非结构化的号码,如“4929112345678”
如果我取消它,事情开始变得奇怪,UITextField在UI中开始呈现重复的字符,但控制台日志打印也变得非常奇怪。我也尝试过清空textField.text = ""
,但也没有工作。
我在做什么错?我错过了什么,不让它工作正常?我相信这与我有关,而不是图书馆本身。
此外,如果您有任何其他建议(或库)可以帮助我解决此问题,请分享它们。
,你必须从'shouldChangeCharactersInRange'返回'FALSE'。 – rmaddy
我试着将'return true'改为'return false'。有'textField.text =“+ \(updatedTextString作为字符串)”'不幸的是每次我点击'删除'时都会加上'+'符号。我的方法存在逻辑错误,但我无法弄清楚。我很感激,如果你可以添加一个答案,所以我可以尝试 – senty