2012-04-10 37 views
11

He establecido un inputView personalizado en mi UITextField. Necesito una manera de mostrar los datos seleccionados en mi personalizado inputView en el UITextfield. Me gustaría lograr esto de la misma manera que lo hace el teclado del sistema.Entrada de entrada personalizada para UITextField, ¿cómo dirijo la entrada de regreso al campo de texto?

¿Alguien sabe cómo se hace esto? ¿Cómo obtiene el teclado del sistema una referencia al UITextfield que es el primer respondedor?

+0

sea más preciso, ¿qué quiere decir con "entrada directa al campo de texto"? ¿Quieres enfocar el UITextField? – Dion

+0

Lo siento, pensé que era más preciso en mi explicación. Lo que quiero decir es que configuro la propiedad inputView en un UITextField en mi vista de entrada personalizada. Entonces, cuando el usuario presiona un botón en mi inputView personalizado, ¿cómo obtengo una referencia al UITextfield que es el primer respondedor actual, así que puedo cambiar la propiedad del texto de ese UITextfield para reflejar la entrada del usuario? –

Respuesta

12

¿Cómo obtiene el teclado del sistema una referencia al UITextfield que es el primer respondedor?

Simplemente le pide al sistema la primera respuesta; desafortunadamente, ese es un método privado de UIKit (o fue, la última vez que lo verifiqué). Puede encontrar al primer respondedor recurriendo a través de la jerarquía de vista y preguntando a cada vista, pero eso es bastante torpe.

En su lugar, se puede añadir un enlace al campo de texto en la vista de entrada (estoy asumiendo su punto de vista de entrada es una subclase UIView personalizado):

@property(nonatomic, assign) UITextField* target; 

A continuación, utilice los métodos de delegado UITextField en su opinión controlador para ver cuando el campo de texto se está enfocando:

- (void)textFieldDidBeginEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = textField; 
} 

- (void)textFieldDidEndEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = nil; 
} 
+0

Gran respuesta dave, eso es exactamente lo que estaba buscando, gracias. –

10

al enviar el aporte de la vista de entrada personalizado de vuelta al campo de texto, tenga en cuenta que se puede (debe) utilizar los métodos UIKeyInput de protocolo que se ajusta a UITextField. A saber:

- (void)deleteBackward; 
- (void)insertText:(NSString *)text; 
Cuestiones relacionadas