UITextField не получает ввод с клавиатуры
-
11-12-2019 - |
Вопрос
У меня возникли проблемы с вводом текста в UITextField под СВПрогрессHUD (По сути, UIView с полноэкранным прозрачным UIWindow и некоторыми подпредставлениями UIView, показывающими текст и настраиваемый индикатор выполнения).
Моя проблема в том, что UITextField отображает мигающий курсор и показывает клавиатуру, но когда я нажимаю клавишу, в текстовое поле ничего не вводится.Я вижу только, что мигание курсора прерывается, как обычно.Интересно, что клавиша «Назад» (удалить) работает (она действительно удаляет последнюю букву в UITextView), но не любая другая клавиша.
Я использую iOS 6.
Любая помощь будет высоко оценен.
РЕДАКТИРОВАТЬ:Тот же UITextField отлично работает, когда не отображается SVProgressHUD.Это наводит меня на мысль, что это как-то связано со службой экстренного реагирования, но я уже пробовал звонить. resignFirstResponder
в каждом окне и подпредставлении SVProgressHUD, но он все равно не работает.
Решение
Наконец я нашел проблему:SVProgressHUD вызывает makeKeyAndVisible
при его инициализации, поскольку он хочет получать уведомления клавиатуры для изменения положения.Я посмотрел, что на самом деле представляет собой «Ключевое окно», и узнал:
...Ключевое окно реагирует на ввод пользователя...
Теперь, поскольку UIWindow SVProgressHUD был ключевым окном, другое мое окно, содержащее UITextField, не получало пользовательского ввода.
я наконец позвоню makeKeyWindow
в окне AppDelegate, и все работает нормально.
Я надеюсь, что это поможет любому, у кого есть подобные проблемы.
Другие советы
Вызов resignFirstResponder()
убрать клавиатуру перед показом SVProgressHUD
.
Вы реализовали метод....
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
...чтобы отфильтровать нежелательные символы?Если да, возможно, вы немного переусердствовали с фильтрацией?
Для меня это сработало.
Я внес изменения в метод делегата текстового поля, и это сработало.
if ([textField isEqual:selectBankName])
{
return No;
}
else if ([textField isEqual:enterAmountTextfield])
{
return YES;
}
return NO;
}
- установить делегат для текстового поля
Убедитесь, что пользовательское взаимодействие текстового поля включено. И
Наконец, проверьте метод делегата текстового поля.