Мужчины, я не верю, что это будет для меня проблемой. Если я нажимаю клавишу на клавиатуре, делегат UITextField запускает функцию:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
       if ([string lenght]==0) NSLog("Backspace was pressed");
 }

Но проблема в том, что когда текст пуст и я нажимаю клавишу возврата, вызывается эта функция IS NOT. Есть ли способ обнаружить, что в этой ситуации была нажата клавиша Backspace?

Или мне придется отправить эту ошибку в Apple?

Пс. Мне это нужно, чтобы курсор перешел к предыдущему UITextFild (если у вас есть один символ и нажмите backspace, он работает)

0
Rodrigo 26 Авг 2011 в 18:09

2 ответа

Лучший ответ

Что ж, я не думаю, что это ошибка, потому что текстовое поле пустое и, следовательно, в диапазоне не были изменены символы, поэтому метод не запускается. Документация UITextFieldDelegate от Apple говорит:

Текстовое поле вызывает этот метод всякий раз, когда пользователь вводит новый символ в текстовое поле или удаляет существующий символ.

В TextField нет существующих символов, поэтому метод не запускается. Это не помогает ответить на вопрос, но это не ошибка в SDK.

Чтобы получить желаемое поведение, ответ на этот вопрос уже дан здесь: Могу ли я определить ключ удаления, даже если поле UITextField пусто?

1
Community 23 Май 2017 в 12:32

На самом деле это не ошибка. Здесь методы делегата не улавливают событие, так как никаких изменений в значениях текстового поля нет.

Это может быть реализовано путем создания подкласса UITextField и добавления его в качестве настраиваемого класса желаемого текстового поля. Затем переопределите метод «deleteBackward». Этот метод перехватит все события возврата.

Код в Swift:

override func deleteBackward() {
        super.deleteBackward()
        // Enter your stuff here
    }

Также убедитесь, что вы вызываете супер-метод, так как он выполняет основные функции события.

0
Ajith K Jose 29 Июн 2016 в 06:03