Вопрос

У меня возникли проблемы с вводом текста в 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;
}
  1. установить делегат для текстового поля
  2. Убедитесь, что пользовательское взаимодействие текстового поля включено. И

  3. Наконец, проверьте метод делегата текстового поля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top