UITextField shouldChangeCharactersInRange不检测第一个字符

问题描述:

我有一个UITextField,我试图将其格式化为电话号码,但是我挣扎得到UITextField的第一个字母出于某种原因。UITextField shouldChangeCharactersInRange不检测第一个字符

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
{ 
    if textField == myTextField { 
    var updatedTextString : NSString = PartialFormatter().formatPartial(textField.text!) 

    self.formattedPhoneNumber(updatedTextString, textField: textField) 
    } 
return true 
} 

func formattedPhoneNumber(updatedTextString: NSString, textField: UITextField) { 
    textField.text = updatedTextString as String 
    print(updatedTextString) 
} 

我在做什么错?

请注意,我为了使用PhoneNumberKit格式化电话号码(与使用PartialFormatter().formatPartial


编辑:我试着在文本框的文本的开头添加一个默认+符号(如数字+44 ..)

var updatedTextString : NSString = PartialFormatter().formatPartial("+\(textField.text!)") 

但它完全错了。它首先保持打印++++,然后修复4个或更多字符。

如此这般像...

I press 1 - `+1` on UITextField - `+` on console 
then press 5 - `++15` on UITextField - `++1` on console 
then press 6 - `+++156` on UITextField - `+++15` on console 

then press 8 - `+1568` on UITextField - `+1 56` on console 
    // so it magically fixed itself after 4 chars. 

Also removing everything leaves `+++` on UITextField and `++++` on console 
and doesn't delete more 

我在做什么错?


编辑2:

我尝试使用下面张贴的答案。但现在,它只是简单的数字。他们不与PartialFormatter().formatPartial()

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
{ 
    if textField == myTextField { 
    let textString : NSString = textField.text! 
    let candidateString : NSString = textString.stringByReplacingCharactersInRange(range, withString: string)  
    let updatedTextString : NSString = PartialFormatter().formatPartial(candidateString as String) 

    self.formattedPhoneNumber(updatedTextString, textField: textField) 
    } 
    return true 
} 

分组的shouldChangeCharactersInRange()函数是要求改变是否应适用,但尚未允许您的文本字段进行修改。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
{ 
    if textField == myTextField { 
    let textString : NSString = textField.text! 
    let candidateString : NSString = textString.stringByReplacingCharactersInRange(range, withString: string)  
    let updatedTextString : NSString = PartialFormatter().formatPartial(candidateString as String) 
    print(updatedTextString) 
    textField.text = updatedTextString 
    } 
    return true 
} 
+0

我让你的例子工作并编辑你的答案。但是,它现在不会将数字分组为'PartialFormatter()。formatPartial'预计会做;它只显示简单的数字。但是,现在检测字符工作正常 – senty