Счетчик текстового поля показывает предыдущий символ после удаления символа с помощью клавиатуры в Swift 4 - PullRequest
0 голосов
/ 24 октября 2019

Я использовал текстовое поле. Мне нужно посчитать символ для вызова функции после 11 символов. Функция работает find. Но когда я удалил один символ, он показывает предыдущий символ. У меня есть введите 01921687433 в текстовом поле. Но при удалении одного символа из этого числа, например 0192168743 , отображается полное число из 11 цифр, а не 10 цифр. Но текстовое поле это показывает 0192168743 . вот мой код ..

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//print("While entering the characters this method gets called")


     let currentText = textField.text! + string

    if(currentText.characters.count == 11){

        print("account 11 digit =", currentText)
      //Action here

    }


  return true;
 }

Пожалуйста, помогите мне найти текущий текст

1 Ответ

2 голосов
/ 24 октября 2019

У вас неправильный код для определения обновленного текста. Помните, что любой объем текста может быть удален, заменен или добавлен, и это может произойти в любом месте строки на основе текущего выделения.

Ваш код должен выглядеть следующим образом:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let newText = textField.text!.replacingCharacters(in: Range(range, in: textField.text!)!, with: string)

    if newText.count == 11 {
        print("account 11 digit = \(newText)")
    }

    return true
}

Принудительное развертывание в этом коде безопасно. Свойство text UITextField никогда не может вернуть nil, и преобразование диапазона всегда будет успешным, если Apple не введет ошибку в UIKit.

Также обратите внимание, что использование characters не рекомендуется дляпока. И Swift не нуждается в точках с запятой в конце строк и не нуждается в скобках в операторах if.

...