2011-08-31 16 views
18

Estoy trabajando en una aplicación que en algún momento requiere la entrada del teclado. Mi aplicación utiliza OpenGL ES para mostrar, y tengo mi propio marco de gráficos que puede mostrar un campo de texto, y sabe cómo administrar el cursor y representar el texto. Este código funciona muy bien en otras plataformas que tienen un teclado físico, como Windows y OS X.Cómo mostrar el teclado de iPhone/iPad a través de una pantalla completa Aplicación OpenGL ES

Todo lo que necesito para que funcione la versión de iOS de mi aplicación es poder subir y bajar el teclado mediante programación, y también para obtener los eventos de pulsación de tecla del usuario en mi vista para poder luego enrutarlos al propio sistema de eventos de mi marco.

Vi this question, pero no pude hacer que la solución representada funcionara. No estoy seguro si es porque estoy haciendo algo mal, o porque no funciona en las versiones actuales de iOS.

EDITAR: Sería tan útil apuntar a una aplicación en funcionamiento con código fuente que crea cualquier elemento de la interfaz de usuario de forma programática y lo muestra en la parte superior de una pantalla de GL ES. Creo que puedo descifrar el resto si entiendo esa parte.

+0

¿No podría hacerlo funcionar en qué sentido? El teclado no aparece, no se puede redirigir la entrada de texto (¿cuál sería mejor hacer con un delegado, por cierto) o algo más? ¿Puedes mostrar tu código UITextField relacionado? – Tommy

+0

El problema es que el teclado no aparece, correcto. Si hago que UITextField sea visible en lugar de estar oculto, tampoco lo veo sobre mi pantalla GL. – Miguel

+0

¿Qué marco de gráficos está usando para mostrar el campo de texto? –

Respuesta

22

No puedo apuntar a un ejemplo de trabajo, pero creo que lo que estás buscando es aquí http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKeyInput_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIKeyInput

La idea básica es que implemente el protocolo UIKeyInput en un objeto UIResponder, tales como UIView . Haga que la vista sea el primer Respondedor y el teclado debería aparecer automáticamente. El protocolo UIKeyInput le proporciona comentarios simples para insertar un carácter y eliminar un carácter cuando el usuario presiona los botones del teclado.

Esto no es un código de trabajo, pero sería algo como esto:

@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 

cuando se attched la vista, lo convierten en el primer nivel de respuesta para mostrar el teclado

[myView becomeFirstResponder]; 

o renunciar primer respondedor para cerrar el teclado

[myView resignFirstResponder]; 

Editar: asegúrese de que su vista está unida al vi nueva jerarquía o esto probablemente no hará nada.

+0

Gracias, voy a intentar esto. Como tengo una vista única en mi aplicación, asumí que ya era la primera que respondía. Estaba llamando a firstResponder en el campo de texto, que era un elemento secundario de la vista. ¿Hay algún beneficio en crear una segunda vista solo para esto? – Miguel

+3

Muchas gracias por su ayuda. He logrado que aparezca el teclado siguiendo tus consejos. Un detalle que te perdiste que puede no ser obvio (al menos no fue para mí) es que un UIView por defecto no se convertirá en el primer respondedor, tienes que implementar canBecomeFirstResponder y devolver SÍ para habilitar eso. – Miguel

+0

No estoy seguro de si hay una ventaja significativa al usar una segunda vista para manejar el teclado, pero quizás si estuviera tratando de procesar otros eventos en la misma vista (toque eventos, quizás), entonces usar una vista infantil podría darle una mejor control sobre la cadena de respuesta –

Cuestiones relacionadas