Как отобразить клавиатуру iPhone / iPad поверх полноэкранного приложения OpenGL ES - PullRequest
18 голосов
/ 31 августа 2011

Я работаю над приложением, которое в какой-то момент требует ввода с клавиатуры. Мое приложение использует OpenGL ES для отображения, и у меня есть собственная графическая структура, которая может отображать текстовое поле и знает, как управлять курсором и отображать текст. Этот код прекрасно работает на других платформах с физической клавиатурой, таких как Windows и OS X.

Все, что мне нужно для того, чтобы моя версия приложения для iOS работала, - это возможность программно поднимать и опускать клавиатуру, а также получать события нажатия клавиш от пользователя в моем представлении, чтобы я мог затем направить их в собственная система событий моего фреймворка.

Я видел этот вопрос , но я не мог заставить решение, изображенное там, работать. Не уверен, что это из-за того, что я делаю что-то не так или потому что это не работает в текущих версиях iOS.

РЕДАКТИРОВАТЬ: Было бы также полезно указать на работающее приложение с исходным кодом, которое программно создает любой элемент пользовательского интерфейса и отображает его поверх экрана GL ES. Я думаю, что смогу понять остальное, если пойму эту часть.

1 Ответ

22 голосов
/ 01 сентября 2011

Я не могу указать вам на рабочий пример, но я верю, что вы ищете здесь http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKeyInput_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIKeyInput

Основная идея заключается в том, что вы реализуете протокол UIKeyInput для объекта UIResponder, такого как UIView. Сделайте вид первым ответчиком и клавиатура должна автоматически появиться. Протокол UIKeyInput обеспечивает простую обратную связь для вставки символа и его удаления, когда пользователь нажимает кнопки на клавиатуре.

Это не рабочий код, но он будет выглядеть примерно так:

@interface MyKeyboardView : UIView <UIKeyInput>
@end

@implementation MyKeyboardView
- (void)insertText:(NSString *)text {
    // Do something with the typed character
}
- (void)deleteBackward {
    // Handle the delete key
}
- (BOOL)hasText {
    // Return whether there's any text present
    return YES;
}
- (BOOL)canBecomeFirstResponder {
    return YES;
}
@end

когда представление подключено, сделайте его первым респондентом, чтобы показать клавиатуру

[myView becomeFirstResponder];

или подать в отставку первого респондента, чтобы отклонить клавиатуру

[myView resignFirstResponder];

Редактировать: убедитесь, что ваше представление привязано к иерархии представлений, иначе это ничего не изменит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...