Обнаружьте клавишу Backspace в пустом UITextField

Есть ли любой способ обнаружить, когда Клавиша Backspace/клавиша Delete нажимается в клавиатуре iPhone на a UITextField это пусто? Я хочу знать, когда Клавиша Backspace нажимается только если UITextField пусто.


На основе предложения от @Alex Reynolds в комментарии я добавил следующий код при создании моего текстового поля:

[[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selector(handleTextFieldChanged:)
              name:UITextFieldTextDidChangeNotification
            object:searchTextField];

Это уведомление получено (handleTextFieldChanged функция вызвана), но все еще когда я нажимаю клавишу Backspace в пустом поле. Какие-либо идеи?


Кажется, существует некоторый беспорядок вокруг этого вопроса. Я хочу получить уведомление, когда клавиша Backspace нажимается.Именно. Но решение должно также работать когда UITextField уже пусто.

122
задан TheNeil 20 May 2019 в 19:27
поделиться

3 ответа

Может быть, это и не так уж важно, но может сработать. Попробуйте настроить текст текст текстового поля на символ пробела нулевой ширины \u200B. При нажатии на пробел в текстовом поле, которое кажется пустым, на самом деле будет удалено пространство. Тогда вы можете просто снова вставить пробел.

Может не сработать, если пользователю удастся переместить каретку влево от пробела.

.
34
ответ дан 24 November 2019 в 01:21
поделиться

Попробуйте делегат

- (BOOL)textField:(UITextField *)textField 
        shouldChangeCharactersInRange:(NSRange)range 
        replacementString:(NSString *)string {

Затем проверьте, range.length == 1 , что, кажется, имеет место, когда Backspace попал.

10
ответ дан 24 November 2019 в 01:21
поделиться

Ответ Никласа Альвеуса помог мне с аналогичной проблемой

Я ограничивал ввод определенным набором символов, но игнорировал обратные пробелы. Я попросил его проверить range.length == 1 перед обрезкой NSString . Если это правда, я просто возвращаю строку и не обрезаю ее. См. Ниже

 - (BOOL) textField:(UITextField *)textField 
          shouldChangeCharactersInRange:(NSRange)range 
          replacementString:(NSString *)string
 {
     NSCharacterSet *nonNumberSet = 
      [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] 
         invertedSet];

    if (range.length == 1) {
       return string;
    }
    else {
       return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
    }   
 }
8
ответ дан 24 November 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: