Как определить касание кнопки возврата UIKeyboard на UITextField?

Как определить нажатие кнопки возврата на UIKeyboard?

введите описание изображения здесь

Благодарность


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


person elp    schedule 25.07.2011    source источник
comment
Аналогичный вопрос здесь: stackoverflow.com/questions/4351358/   -  person Tom Irving    schedule 25.07.2011
comment
для пустого UITextField, обнаружив обратное пространство, проверьте это: - stackoverflow.com/a/45327651/996796   -  person Ravi Sharma    schedule 29.11.2017


Ответы (3)


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

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

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

person LombaX    schedule 13.10.2012
comment
На мой взгляд, это должен быть принятый ответ !!! - person Natan R.; 04.04.2013
comment
+1 Этот ответ намного проще, чем ответы на stackoverflow.com/questions / 1977934 /. - person ide; 21.03.2014
comment
На iOS8 это не работает - есть ошибка Apple. Надеюсь, это будет исправлено в iOS8.1. - person Andrew Bennett; 07.10.2014
comment
Все еще не работаете над IOS8.1, вы нашли другое решение @AndrewBennett? - person vrunoa; 17.01.2015

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

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

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

textField.text = @"\u200B";

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

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

person elp    schedule 25.07.2011