Когда мое представление ввода текста касается, почему клавиатура не показывает?
Q: Когда мое представление ввода текста касается, почему клавиатура не показывает?
A: Существует несколько причин, почему клавиатура не показывает:
Во-первых, это может быть, потому что клавиатура покрыта высокоуровневым окном (см.
windowLevel для получения дополнительной информации). В iOS клавиатура является подпредставлением независимого окна. Окно имеет более высокий уровень, чем ключевое окно приложения, таким образом, это всегда выводится на экран в передней стороне. Если Вы создаете другое окно в перекрытой позиции и делаете ее уровень выше, чем то из окна клавиатуры, то клавиатура была бы покрыта, таким образом став невидимой для Ваших пользователей. Можно подтвердить это путем проверки соответствующих атрибутов окон приложения, как показано в Перечислении 1:Перечисление 1 , Распечатывающее соответствующие атрибуты окон
for (UIWindow *window in [[UIApplication sharedApplication] windows]) {NSLog(@"isKeyWindow = %d window level = %.1f frame = %@ class = %@\n",
window.isKeyWindow, window.windowLevel,
NSStringFromCGRect(window.frame), window.class.description);
}
Перечисление 2 обеспечивает журнал в качестве примера, когда клавиатура покрыта высокоуровневым окном (
MyCustomWindow) в перекрытой позиции.Перечисление 2 журнал в качестве примера, когда клавиатура покрыта высокоуровневым окном
TheApp[22892:60b] isKeyWindow = 1 window level = 0.0 frame = {{0, 0}, {320, 480}}class = UIWindow
TheApp[22892:60b] isKeyWindow = 0 window level = 1.0 frame = {{0, 0}, {320, 480}}class = UITextEffectsWindow
TheApp[22892:60b] isKeyWindow = 0 window level = 2000.0 frame = {{0, 200}, {320, 280}}class = MyCustomWindow
Решение состоит в том, чтобы избегать использования многократных окон путем замены дополнительного окна с целью или иерархии представления. В iOS приложение должно только иметь одно окно, если это не должно отображать содержание на экране внешнего устройства (в этом случае, дополнительное окно обычно выводится на экран на новом экране). Это гарантирует, что клавиатура, когда показано, всегда перед экраном.
Во-вторых, Ваша клавиатура может не показать, потому что Вашему представлению ввода текста не удалось стать первым респондентом. Это может быть вследствие любой из следующих причин:
Вашему представлению ввода текста не позволяют стать первым респондентом. Реализация
-(BOOL)canBecomeFirstResponderметод вUIViewвозвратыNOпо умолчанию; таким образом, препятствуя тому, чтобы экземпляры представления стали первым респондентом. Поэтому, если Ваш класс представления непосредственно получен изUIView, тогда необходимо переопределить вышеупомянутый метод для возвратаYESкак показано в Перечислении 3. Выполнение так гарантирует, что Вашему представлению ввода текста позволяют стать первым респондентом.Перечисление 3 , Позволяющее пользовательское представление стать первым респондентом
- (BOOL)canBecomeFirstResponder {return YES;
}
Ваше представление ввода текста отказывается становиться первым респондентом. Это может произойти когда
-(BOOL)becomeFirstResponderметод Ваших возвратов класса представленияNO. Если Вы переопределяете этот метод по некоторым причинам, уверены, что он возвращаетсяYESкогда представление ввода текста является интерактивным.
Наконец, проблема может быть связана с поддержкой авторотации контроллеров представления. Начиная с iOS 6,
UIViewControllerподклассы поддерживают авторотацию путем возврата битовой маски ориентации в- (NSUInteger) supportedInterfaceOrientations метод.UIKitиспользует битовую маску для вычисления кадра клавиатуры для текущей ориентации пользовательского интерфейса. Возврат неправильной битовой маски может заставить клавиатуру быть помещенной вне экрана. Таким образом, если Ваша авторотация поддержки приложений, быть уверенным, что-(NSUInteger)supportedInterfaceOrientationsметод реализован и возвращает правильную битовую маску. ПосмотритеUIInterfaceOrientationMask для допустимых значений битовой маски.
История версии документа
| Дата | Примечания |
|---|---|
| 14.05.2014 | Новый документ, объясняющий, почему клавиатура не показывает, когда касается представление ввода текста. |