菜鸟教程小白 发表于 2022-12-13 01:23:39

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 &lt;GLKit/GLKit.h&gt;
#import &#34;KeyboardView.h&#34;

@interface ViewController : GLKViewController {
    KeyboardView* keyBoard;
}
@end
</code></pre>

<p>ViewController.m 的相关部分:</p>

<pre><code>- (void)viewDidLoad
{
;
self.context = [ initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
    NSLog(@&#34;Failed to create ES context&#34;);
}
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 &lt;UIKit/UIKit.h&gt;

@interface KeyboardView : UIView &lt;UIKeyInput, UITextFieldDelegate&gt; {
    UITextField *field;
}
</code></pre>

<p>KeyboardView.m:</p>

<pre><code>#import &#34;KeyboardView.h&#34;
@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(@&#34;text: %@&#34;, textField.text);
NSString *newString = ;
if ( &lt; 1) {
    return YES;
} else
    {
    textField.text = &gt; 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]
查看完整版本: ios - 如何在 OpenGL es 应用程序中使用键盘