2017-01-13 3 views
2

Я использую UITextView и реализована функция ДелегатUITextView делегат вызова несколько раз

var count = 0 
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    print(text) 
    count += 1 
    print(count) 
    return true 
} 

образец

enter image description here

Когда я выбираю предиктивного ввода текста с клавиатуры, shouldChangeTextInRange делегат звонит дважды.

  1. Почему этот делегат дважды звонит?
  2. Почему это происходит с одним только
+0

Вы пытаетесь подсчитать количество символов? Если это так, это не сработает, потому что удаление одного символа увеличит число, а не уменьшит его. – redent84

+0

count - посмотреть, сколько раз делегат получает вызов – Suresh

+0

В чем проблема? Почему в вашей заявке дважды возникает проблема? – redent84

ответ

0

Текст вид интеллектуального ввода текста вызывает этот метод всякий раз, когда пользователь вводит новый персонаж или удаляет существующий символ. Реализация этого метода является необязательной. Вы можете использовать этот метод для замены текста, прежде чем он будет привязан к хранилищу текстового представления. Например, проверка орфографии может использовать этот метод для замены слова с орфографической ошибкой с правильной орфографией.

из яблока Docs https://developer.apple.com/reference/uikit/uitextviewdelegate/1618630-textview

2

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

var count = 0 
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
     print(text) 
     let trimmedString = text.trimmingCharacters(in: .whitespaces) 
     if(trimmedString.characters.count != 0){ 
     count += 1 
     print(count) 
     } 
     return true 
    } 

Ответ на оба вопроса 1 и 2, При выборе текста с помощью предиктивного ввода текста. Во-первых, он добавляет слово, а затем добавляет пробел. Вот почему делегат называется дважды.

+0

и если '' Text' или свойство attributedText' TextView модифицируется внутри этого метода делегата, то его называется трижды – Shyam

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