1

我有一个 UITextField 并且我正在尝试将其格式化为电话号码,但是由于某种原因我正在努力获取 UITextField 的第一个字母。

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


编辑:我尝试+在 textField 文本的开头添加一个默认符号(如数字 +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
}
4

1 回答 1

2

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
} 
于 2016-03-16T03:54:19.347 回答