ios - 如何在 OpenGL es 应用程序中使用键盘
<p><p>我有一个使用键盘的 OpenGL ES 应用程序。当触摸屏幕时,我可以使键盘在屏幕上弹出。如果我是正确的,每按一次键,</p>
<pre><code>- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
</code></pre>
<p>应该被调用。但事实并非如此。该应用程序最初是一个纯 OpenGL Mac 游戏,我正在尝试制作 iOS 版本,所以我没有使用 Storyboard 。如果可能的话,我更喜欢以编程方式做所有事情。这是我的 ViewController.h 代码:</p>
<pre><code>#import <GLKit/GLKit.h>
#import "KeyboardView.h"
@interface ViewController : GLKViewController {
KeyboardView* keyBoard;
}
@end
</code></pre>
<p>ViewController.m 的相关部分:</p>
<pre><code>- (void)viewDidLoad
{
;
self.context = [ initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
CGRect viewRect = CGRectMake(0, 0, 100, 100);
keyBoard = [ initWithFrame:viewRect];
;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
;
;
}
</code></pre>
<p>KeyboardView.h:</p>
<pre><code>#import <UIKit/UIKit.h>
@interface KeyboardView : UIView <UIKeyInput, UITextFieldDelegate> {
UITextField *field;
}
</code></pre>
<p>KeyboardView.m:</p>
<pre><code>#import "KeyboardView.h"
@implementation KeyboardView
- (id)initWithFrame:(CGRect)frame
{
self = ;
if (self) {
field = [ initWithFrame:CGRectMake(0, 0, 100, 10)];
}
return self;
}
- (void)insertText:(NSString *)text {
}
- (void)deleteBackward {
}
- (BOOL)hasText {
return YES;
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSLog(@"text: %@", textField.text);
NSString *newString = ;
if ( < 1) {
return YES;
} else
{
textField.text = > 1 ? : newString;
;
return NO;
}
}
@end
</code></pre>
<p>我需要能够在键盘处于事件状态时获取用户输入的每个字符。我承认,我有点困惑。我不确定我的方法是否正确,因此非常感谢您的帮助。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>键盘文本输入不是通过<code>UITextField</code>的</p>
<p><code>- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string</code></p>
<p>确实是通过<code>UIKeyInput</code>的</p>捕获的
<p><code>- (void)insertText:(NSString *)text;</code></p>
<p>我正在使用软键盘在我的 GLKView (OpenGLES) 应用程序上捕获文本,我什至根本不需要任何 UITextField</p>
<p>供引用:</p>
<p> <a href="https://developer.apple.com/reference/uikit/uikeyinput?language=objc" rel="noreferrer noopener nofollow">UIKeyInput Reference Doc</a> </p>
<p>编辑:</p>
<p>你需要调用你的keyboardview的<code>becomeFirstResponder</code>来显示你的键盘并调用<code>resignFirstResponder</code>来隐藏它</p>
<p>您还需要覆盖 <code>canBecomeFirstResponder</code> 并返回 <code>TRUE</code></p></p>
<p style="font-size: 20px;">关于ios - 如何在 OpenGL es 应用程序中使用键盘,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25593606/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25593606/
</a>
</p>
页:
[1]