Есть ли любой способ обнаружить, когда Клавиша Backspace/клавиша Delete нажимается в клавиатуре iPhone на a UITextField
это пусто? Я хочу знать, когда Клавиша Backspace нажимается только если UITextField
пусто.
На основе предложения от @Alex Reynolds в комментарии я добавил следующий код при создании моего текстового поля:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTextFieldChanged:)
name:UITextFieldTextDidChangeNotification
object:searchTextField];
Это уведомление получено (handleTextFieldChanged
функция вызвана), но все еще когда я нажимаю клавишу Backspace в пустом поле. Какие-либо идеи?
Кажется, существует некоторый беспорядок вокруг этого вопроса. Я хочу получить уведомление, когда клавиша Backspace нажимается.Именно. Но решение должно также работать когда UITextField
уже пусто.
Может быть, это и не так уж важно, но может сработать. Попробуйте настроить текст текст текстового поля на символ пробела нулевой ширины \u200B
. При нажатии на пробел в текстовом поле, которое кажется пустым, на самом деле будет удалено пространство. Тогда вы можете просто снова вставить пробел.
Может не сработать, если пользователю удастся переместить каретку влево от пробела.
. Попробуйте делегат
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
Затем проверьте, range.length == 1
, что, кажется, имеет место, когда Backspace
попал.
Ответ Никласа Альвеуса помог мне с аналогичной проблемой
Я ограничивал ввод определенным набором символов, но игнорировал обратные пробелы.
Я попросил его проверить 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);
}
}