如何在全屏OpenGL ES应用程序上显示iPhone/iPad键盘

Mig*_*uel 18 iphone cocoa-touch uikit ios

我正在开发一个在某些时候需要键盘输入的应用程序.我的应用程序使用OpenGL ES进行显示,我有自己的图形框架,可以显示文本字段,并知道如何管理光标和渲染文本.此代码适用于具有物理键盘的其他平台,如Windows和OS X.

所有我需要让我的应用程序的iOS版本工作的是能够以编程方式上下键盘,并且还将用户的按键事件发送到我的视图中,以便我可以将它们路由到我的框架中事件系统.

我看到了这个问题,但我无法让那里描述的解决方案奏效.不确定是不是因为我做错了,或者因为它在当前的iOS版本上不起作用.

编辑:指向具有源代码的工作应用程序是有帮助的,该源代码以编程方式创建任何UI元素并将其显示在GL ES屏幕之上.如果我理解了这一部分,我想我可以想出其余部分.

Joh*_*hen 22

我不能指出你的工作实例,但我相信你正在寻找的是http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKeyInput_Protocol/Reference/Reference.html #// apple_ref/OCC/INTF/UIKeyInput

基本思想是UIKeyInputUIResponder对象上实现协议,例如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
Run Code Online (Sandbox Code Playgroud)

当视图被附加时,使其成为显示键盘的第一响应者

[myView becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)

或辞职第一响应者解雇键盘

[myView resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)

编辑:确保您的视图附加到视图层次结构,否则这可能不会执行任何操作.

  • 非常感谢你的帮助.我设法按照你的建议弹出键盘.你遗漏的一个细节可能并不明显(至少不适合我)是UIView默认情况下不会成为第一响应者,你必须实现canBecomeFirstResponder并从中返回YES以启用它. (3认同)