Как обнаружить нажатие кнопки "backspace" на UITextField на UIKeyboard?

Как я могу обнаружить нажатие кнопки возврата UIKeyboard?

Спасибо


РЕДАКТИРОВАТЬ: есть ли делегат клавиатуры, который возвращает значение нажатой клавиши?

3 ответа

Решение

Если UITextField является пустым, метод делегата shouldChangeTextInRange не вызывается. Вы можете создать подкласс UITextField и переопределить этот метод:

-(void)deleteBackward;
{
    [super deleteBackward];
    NSLog(@"BackSpace Detected");
}

поскольку UITextField совместим с протоколом UITextInput, этот метод реализован, и вы можете переопределить его, чтобы определить, когда нажата клавиша возврата. Затем вы можете написать свой собственный метод протокола / делегата, чтобы предупредить ваш пользовательский делегат текстового поля, если обнаружен возврат.

Прежде всего ваш UIViewController что ссылается на UITextField должен соответствовать UITextFieldDelegateprotocol, Затем установите свой класс как delegate к UITextField (например. [myTextField setDelegate:self]). Затем в вашем классе вы добавляете следующее. Когда строка "" отправляется как replacementString Вы знаете, что это забой.

(BOOL)textField:(UITextField *)textField 
      shouldChangeCharactersInRange:(NSRange)range 
      replacementString:(NSString *)string
{                
    if ([string isEqualToString:@""]) {
        NSLog(@"Backspace");            
    }
    return YES;
}

Временно я вставляю нулевой пробел на textFieldDidBeginEditing

textField.text = @"\u200B";

на backspace, он удаляет эти символы, но графически это то же самое!

Это хак, он работает, но он скрывает заполнитель текста... не хорошо...

Другие вопросы по тегам