2014-08-31 3 views
2

У меня есть приложение 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 

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

+0

вы должны текстовое поле «поле» добавить в супер-просмотр как под просмотр: [self add SubView: поле]; – stosha

+0

Добавление поля в супер-просмотр, не имеет значения. Кстати, я хочу, чтобы текстовое поле было скрыто. Я просто хочу получить нажатия клавиш с клавиатуры, а затем использовать эти символы для других вещей. – DARKMATTER

ответ

1

ввода текста клавиатура не захватывается через UITextField 's

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

Он действительно захвачен через UIKeyInput' s

- (void)insertText:(NSString *)text;

Я использую мягкую клавиатуру захватить текст в моем приложении GLKView (OpenGLES), и мне даже не нужен какой-либо UITextField вообще

Для справки:

UIKeyInput Reference Doc

EDIT:

Вам нужно позвонить своему keyboardview-х becomeFirstResponder, чтобы показать клавиатуру и вызвать resignFirstResponder, чтобы скрыть его

Кроме того, необходимо переопределить canBecomeFirstResponder и возврат TRUE

Смежные вопросы