2012-01-11 15 views
7

OK He buscado y visto y creo que me falta algo sobre teclados personalizados e inserto texto en UITextField. Al igual que muchas personas, estoy creando un teclado personalizado UIView con mi propio conjunto de teclas en UIButtons personalizado. A continuación, asigno esta vista al cuadro inputView de UITextField y luego aparece mi teclado cuando ese campo de texto se convierte en el primer respondedor. Dentro del teclado, capturo las acciones de los botones y las traduzco a lo que serían las pulsaciones de teclas.iOS Crear teclado personalizado Generar pulsaciones de teclas estándar para UITextField

Pero a partir de aquí estoy desconcertado acerca de la mejor manera de enviar mis teclas al campo de texto. He visto muchos ejemplos como iOS Custom Keyboard Updating Text Field In Parent View y Return Inputs To UITextfield With Custom Inputview y How To Push Key Value Into UITextView From Custom Keyboard In iOS donde la solución parece ser insertar un puntero al objetivo UITextField dentro de la vista personalizada.

Esto no me parece correcto, ya que para múltiples UITextFields tengo que cambiar manualmente las referencias en un solo teclado personalizado siempre que un nuevo campo de texto se convierta en el primero, o tengo que llevar un teclado personalizado correspondiente para cada campo de texto que quiero apoyar.

Me parece que un teclado solo debe traducir los toques en tokens y enviar esos tokens a la línea para que los interprete quien los reciba (¿primeros en responder?). iPad For iPhone Developers 101 Custom Input View Tutorial parece hacer esto, pero crea un protocolo personalizado para hacerlo. Imagino (en realidad, un SWAG - Scientific Wild Arsed Guess) que los teclados estándar de iOS funcionan de esa manera, pero usan un protocolo específico para pasar las pulsaciones de teclas. Entonces, lo que quiero poder hacer es generar manualmente la misma cadena de eventos/mensajes que el teclado estándar.

Entonces, ¿cómo puedo hacer esto? ¿O puedo hacer esto con API públicas? ¿O el funcionamiento de los teclados estándar está muy ligado al UITextField?

+0

Sé que esta pregunta es antigua, pero creé un ejemplo completo, de trabajo y de código abierto de cómo hacer esto llamado Numberpad, y lo puse en [Github] (https://github.com/lnafziger/Numberpad) – lnafziger

Respuesta

1

Esta es una pregunta muy abierta. Realmente, depende de ti elegir lo que quieras. Apple's documentation indica esto:

Las subvistas de una vista de entrada y una vista de accesorio de entrada pueden ser lo que usted desee. Si son botones u otros controles, debe especificar objetivos y acciones para cada control e implementar los métodos de acción asociados para realizar la entrada o manipulación de datos.

También podría hacer una subclase UITextField e implementar explícitamente el captador de inputView para devolver un puntero a su clase de vista personalizada teclado. En este getter puede configurar un sistema de objetivo/acción similar a UIControl como sugiere anteriormente. Hacerlo de esta manera elimina la necesidad de configurar el teclado personalizado desde el exterior, todo se maneja internamente. También pone ese código en un solo lugar.

Una vez que el campo de texto personalizado haya salido de la primera respuesta, puede quitar el puntero del campo de texto del teclado.

+0

En cierto sentido, estoy preguntando exactamente qué indican los Apple Docs: métodos para implementar la entrada de datos. En este caso, quiero que esos métodos emulen los estándares para poder intercambiar mi teclado por el de Apple con cambios mínimos de código (es decir, establecer o no configurar solo inputView). La subclasificación de UITextField está en mi lista por otras razones (y también es mi alternativa en este caso), pero aún considero que mezclar los punteros UITextField en una subclase para que sea manipulación manual y me ofende hacerlo en un entorno de transmisión de mensajes que ya está capaz de hacer lo que quiero –

+0

Creo que está convirtiendo la funcionalidad del teclado personalizado en algo que no es. Un teclado personalizado es solo una vista. No es una subclase especial del marco de teclado privado de Apple (una cosa grande y complicada) que le da ganchos en su sistema. Imagínese si creó un teclado personalizado donde el usuario no presiona los botones para ingresar texto, sino que dibuja las imágenes. ¿Cómo es posible que el código interno de reenvío de claves de Apple envíe estos datos al campo de texto? – pe8ter

0

Soy nuevo en iOS, así que, por favor, perdóneme si lo que digo no tiene sentido (y tenga la amabilidad de corregirme, por favor). : D

¿No hay forma de que su teclado personalizado recorra todos los UITextFields en la UIView principal buscando el FistResponder y envíe sus mensajes a ese FirstResponder? Quiero decir, UIView tiene una propiedad de subvistas donde puedes buscar UITextFields y encontrar el FirstResponder usando la propiedad [UITextField isFirstResponder]. Entonces, ¿podrías usar ese objeto?

Una vez más, lo siento si esto no tiene sentido, pero también estoy muy interesado en este hilo y quería contribuir un poco.

+0

Entiendo lo que dices, pero no estoy seguro de que sea mejor de lo que estoy haciendo. Ya tengo que asignar explícitamente una instancia concreta de un teclado personalizado a un campo de texto específico. Así que para mí es un poco Rube Goldberg hacer que el teclado busque en la pila de vistas para encontrar al primer respondedor. Para mí, lo que falta es darle al teclado un conocimiento explícito del campo de texto al que está vinculado. –

Cuestiones relacionadas