UITextField не получает ввод с клавиатуры

У меня возникают проблемы с вводом текста в UITextField под SVProgressHUD (в основном UIView с полноэкранным прозрачным интерфейсом UIWindow и некоторыми UIView subviews, показывающий текст и пользовательский график выполнения).

Моя проблема в том, что UITextField отображает мигающий курсор и показывает клавиатуру, но когда я нажимаю клавишу, в текстовое поле ничего не вводится. Я вижу только, что курсор мигает, прерывает, как обычно. Интересно, что работает back (delete) ключ (он действительно удаляет последнюю букву в UITextView), но не какой-либо другой ключ.

Я использую iOS 6.

Любая помощь будет высоко оценена.

EDIT: Тот же UITextField отлично работает, когда не отображается SVProgressHUD. Это заставляет меня думать, что это имеет какое-то отношение к первому ответчику, но я уже пробовал называть resignFirstResponder для каждого окна и подсмотра SVProgressHUD, и он все еще не работает.

Ответ 1

Наконец я нашел проблему: SVProgressHUD вызывает makeKeyAndVisible, когда он инициализируется, потому что он хочет получать уведомления о клавиатуре для повторного позиционирования. Я посмотрел, что на самом деле есть "Ключевое окно":

... Ключевое окно отвечает на ввод пользователя...

Теперь, когда UIWindow SVProgressHUD был keyWindow, мое другое окно, содержащее UITextField, не получило ввода пользователя.

Наконец, я вызываю makeKeyWindow в окне AppDelegate, и все работает нормально.

Я надеюсь, что это поможет любому, у кого есть подобные проблемы.

Ответ 2

мое решение: вызовите resignfirstresponder, чтобы закрыть клавиатуру перед показом SVProgressHUD.

Ответ 3

Вы реализовали метод....

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

... отфильтровать любые нежелательные символы? Если да, возможно, это немного переусердствует с фильтрацией?

Ответ 4

Для меня это сработало.

Я сделал изменения в методе делегата textfield, после чего он работал.

if ([textField isEqual:selectBankName])
{
   return No;
}
else if ([textField isEqual:enterAmountTextfield])
{
    return YES;
}

return NO;
}
  • установить делегат для текстового поля
  • Удостоверьтесь, что текстовое поле userInteraction Enabled.And

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