2009-01-22 13 views
6

Estoy tratando de hacer algo que pensé que sería simple.¿Cómo se cambia el UIControl con foco en iPhone?

Tengo un formulario con dos UITextFields en él. Estoy usando el estilo UIReturnKeyNext en el primero. La idea es que cuando el usuario rellene el primer campo, haga clic en Siguiente y yo los transforme en el siguiente UITextField. He visto otras aplicaciones que hacen esto y funciona muy bien. Pero no puedo descifrar cómo enfocar el siguiente campo.

Respuesta

9

Simple. envíe un mensaje becomeFirstResponder a su otro campo de texto. Cuando el otro campo de texto acepta el estado de la primera respuesta, recibirá la información del teclado.

Por ejemplo:

//called when the next button is pressed 
//Assume textField1, 2, and 3 are instances of UITextField 
-(IBAction) nextPressed: (id) sender { 
     if ([textField1 isFirstResponder]) { 
     [textField2 becomeFirstResponder]; 
     } 
     if ([textField2 isFirstResponder]) { 
     [textField3 becomeFirstResponder]; 
     } 

} 
+0

Esto fue lo primero que pensé así, pero yo estaba confundido por los documentos, que establecen claramente becomeFirstResponder se utiliza para notificar a un UIResponder cuando están a punto de convertirse en el primer respondedor En Mac OSX, NSResponder prohíbe llamar a becomeFirstResponder directamente. Pero, resulta que estás en lo correcto. – Andy

+0

¿enlaza usted el campo SiguientePresionada a cada campo de texto (en el ejemplo anterior que lo vincularía a textField1, 2, 3) ??? – HollerTrain

+0

Sí, si usa el constructor de interfaz, puede vincular la acción 'Retocar dentro' de todos los campos de texto al mismo método nextPressed, mientras los conecta a cada uno de ellos con su IBOutlet (textField1, textField2, etc.) –

0

la respuesta anterior funciona muy bien con la excepción de que usted quiere resignFirstResponder desde el campo de texto original.

Si no renuncia al primer respondedor, el ajuste de desplazamiento automático del IOS no funcionará cuando el siguiente campo se convierta en el primer respondedor. (El teclado puede estar cubriendo el campo de texto siguiente.)

-(IBAction) nextPressed: (id) sender { 

    //Resign first so that when the next field becomes firstResponder 
    //the text field will scroll into place if covered by the keyboard 
    [sender resignFirstResponder];  

    if ([textField1 isFirstResponder]) { 
     [textField2 becomeFirstResponder]; 
    } 
    if ([textField2 isFirstResponder]) { 
     [textField3 becomeFirstResponder]; 
    } 
} 
+0

Espere un momento ... ¿qué ajuste de desplazamiento automático iOS?!? Siempre he visto que tiene que manejar ese desplazamiento usted mismo. Tengo una aplicación simple aquí con varios UITextFields en él, y ciertamente no se desplazan a la vista cuando el teclado los cubre. ¿Qué me falta? –

+0

Esto está integrado en IOS. Bastante seguro de que los campos de texto deben estar dentro de una vista que está dentro de un UIScrollView. – zachzurn

+0

Ah, bien, quizás este es un comportamiento de UIScrollView ... que tendría algún sentido. Sin embargo, no es especialmente útil en otros casos. –

Cuestiones relacionadas