2010-10-15 24 views
13

Cuando se usa un teclado de hardware con iOS, al presionar la pestaña o la tecla Mayús se navega automáticamente al respondedor lógico siguiente o anterior, respectivamente. ¿Hay alguna manera de hacer lo mismo programáticamente (es decir, simular la tecla de tabulación en lugar de hacer un seguimiento del orden lógico manualmente)?Simular tecla de tabulación Presione en SDK de iOS

+6

duplicado de la pregunta: http://stackoverflow.com/questions/3241966/ focus-on-next-valid-key-view-on-iphone que obtuvo una excelente respuesta. –

Respuesta

0

No estoy seguro si esto ayuda, pero en el contexto de un UITextFields, si implementa UITextFieldDelegate, se llamará a - (BOOL)textFieldShouldReturn:(UITextField *)textField cuando se presiona la tecla de retorno del teclado virtual.

He intentado golpear directamente en el teclado de mi computadora portátil y pareció saltar entre todos los campos de texto en el orden en que los agregó a la vista, pero no fue a ningún otro tipo de campos (Botones, etc.).

tecla en el teclado está simulando la tecla en el teclado suave del simulador, que funciona como se esperaba.

3

Puede definir el "orden de tabulación" utilizando la propiedad de etiqueta. La siguiente publicación describe cómo encontrar el siguiente índice de etiqueta para UITextField s, How to navigate through textfields (Next/Done Buttons).

Aquí hay una versión modificada del código de esa publicación. En lugar de eliminar el teclado en el último índice de etiqueta, este código siguiente intentaría regresar al primer índice de etiqueta.

-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
{ 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
    // Found next responder, so set it. 
    [nextResponder becomeFirstResponder]; 

    return NO; 
    } 

    // Try to find the first responder instead... 
    // Assuming the first tag index is 1 
    UIResponder* firstResponder = [textField.superview viewWithTag:1]; 
    if (firstResponder) { 
    // loop back to the first responder 
    [firstResponder becomeFirstResponder]; 
    } else { 
    // Not found, so remove keyboard. 
    [textField resignFirstResponder]; 
    } 

    return NO; // We do not want UITextField to insert line-breaks. 
} 

Si desea un elemento de interfaz de usuario que no sea UITextField, aún debe ser capaz de utilizar la misma lógica, con unas cuantas más cheques.

8

Como William Niu tiene razón, pero también puede usar este código que se explica a continuación.

He utilizado este y consiguió success.Now Consideremos el ejemplo de UITextField ...

Puede utilizar el método delegado de UITextView -(BOOL)textFieldShouldReturn:(UITextField*)textField como se explica a continuación.

Pero antes de hacer esto, debe dar una etiqueta a cada UITextField en orden de Incremento ... (No es necesario incrementar la orden, pero en cuanto a mi código es necesario, también puede usar decremento pero algún código cambios para hacer esto)

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 

    NSInteger nextTag = textField.tag + 1; 
    UIResponder* nextResponder = [self.view viewWithTag:nextTag]; 
    if (nextResponder) { 
     [nextResponder becomeFirstResponder];  
    } else { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

espero que esto funcionará para usted ...

feliz de codificación ....

+0

Esto funciona con campos de texto estáticos, y en realidad es un gran enfoque, pero todo se vuelve loco si tus campos de texto están en tableviewscells reutilizables. – n00neimp0rtant

Cuestiones relacionadas