UITextField shouldChangeCharactersInRange не обнаруживает первый символ

У меня есть 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
}

1 ответ

Решение

Функция 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
} 
Другие вопросы по тегам