У меня есть приложение OpenGL ES, которое использует клавиатуру. Я могу заставить клавиатуру всплывать на экране при касании экрана. Если я прав, каждый раз, когда я нажимаю клавишу,Как использовать клавиатуру в приложении OpenGL es
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
следует называть. Но это не так. Первоначально приложение представляло собой чистую игру OpenGL Mac, в которой я пытаюсь сделать версию iOS, поэтому я не использую раскадровку. Я предпочитаю делать все программно, если это возможно. Вот мой код ViewController.h:
#import <GLKit/GLKit.h>
#import "KeyboardView.h"
@interface ViewController : GLKViewController {
KeyboardView* keyBoard;
}
@end
соответствующие части ViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[EAGLContext alloc] 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 = [[KeyboardView alloc] initWithFrame:viewRect];
[self setupGL];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view addSubview:keyBoard];
[keyBoard becomeFirstResponder];
}
KeyboardView.h:
#import <UIKit/UIKit.h>
@interface KeyboardView : UIView <UIKeyInput, UITextFieldDelegate> {
UITextField *field;
}
KeyboardView.m:
#import "KeyboardView.h"
@implementation KeyboardView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
field = [[UITextField alloc] 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 = [textField.text stringByReplacingCharactersInRange:range withString:string];
if ([newString length] < 1) {
return YES;
} else
{
textField.text = [newString length] > 1 ? [newString substringToIndex:1] : newString;
[textField resignFirstResponder];
return NO;
}
}
@end
Мне нужно, чтобы каждый символ, введенный пользователем, когда клавиатура активна. Я больше всего признаюсь, я немного смущен. Я не уверен, что мой подход правильный, поэтому я очень ценю вашу помощь.
вы должны текстовое поле «поле» добавить в супер-просмотр как под просмотр: [self add SubView: поле]; – stosha
Добавление поля в супер-просмотр, не имеет значения. Кстати, я хочу, чтобы текстовое поле было скрыто. Я просто хочу получить нажатия клавиш с клавиатуры, а затем использовать эти символы для других вещей. – DARKMATTER