2016-03-16 2 views
0

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


Edit: Я пытался добавить знак по умолчанию + в начале текста 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 

Что я делаю неправильно?


Edit 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() спрашивает, следует ли применять изменения, но до сих пор не позволили вашей TextField быть изменены.

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

Смежные вопросы