2010-05-13 8 views
5

En mi proyecto de iPhone estoy usando una vista UITable con UITableViewCells que contiene UITextfields. He visto en muchas aplicaciones que es posible usar el siguiente botón para pasar al siguiente campo de texto en la siguiente celda. Cuál es la mejor manera de lograr esto?iPhone: salta al siguiente uitextfield en uitableview, ¿cómo?

Mi idea es obtener el indexPath de la celda con el campo de texto que se está editando y luego obtener la celda siguiente por cellForRowAtIndexPath. ¿Pero cómo puedo obtener el indexPath de la celda que estoy editando actualmente?

Gracias!

Respuesta

8
  1. Mantenga las referencias a las instancias UITextField en su vista de tabla.
  2. Asigne valores de etiqueta únicos a sus instancias UITextField.
  3. En el último campo de texto, es posible que configure su tipo de tecla de retorno, lo que cambia la etiqueta tecla de retorno del teclado de "Siguiente" para "Hecho": [finalTextField setReturnKeyType:UIReturnKeyDone];

En el método UITextField delegado -textFieldShouldReturn:, caminar a través de la respondedores:

- (BOOL) textFieldShouldReturn:(UITextField *)tf { 
    switch (tf.tag) { 
     case firstTextFieldTag: 
      [secondTextField becomeFirstResponder]; 
      break; 
     case secondTextFieldTag: 
      [thirdTextField becomeFirstResponder]; 
      break; 
     // etc. 
     default: 
      [tf resignFirstResponder]; 
      break; 
    } 
    return YES; 
} 
+0

Gracias! Pero solo estoy haciendo un seguimiento del campo de texto actual, ya que hay muchos campos de texto. ¿Puedo de alguna manera obtener el siguiente campo de texto sin usar etiquetas? – Mrbiggerm

+0

Claro, solo mantenga referencias a ellos, 'UITextField * firstTextField', o use una matriz, etc. Pero las etiquetas son probablemente la forma más rápida de identificar el campo de texto del delegado. –

+0

¿Pero si no quiero hacer un seguimiento de todos los campos de texto o etiquetas? ¿De alguna manera puedo obtener la celda actual en la que se encuentra el campo de texto actualmente en edición y luego obtener la ruta de índice? – Mrbiggerm

0

Suponiendo que el UITextField se añadieron a la UITableViewCell como a continuación

UITableViewCell *cell; 
UITextField *textField; 
... 
textField.tag = kTAG_TEXTFIELD; 
[cell.contentView addSubview:textField]; 
... 

, usted puede obtener la ruta del índice actual a través

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if([textField.superView.superView isKindOfClass:[UITableViewCell class]]) { 
    UITableViewCell *cell = (UITableViewCell *)textField.superView.superView; 
    NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell]; 
    } 
    ... 

UITextField La siguiente fila sería entonces

NSIndexPath *indexPathNextRow = [NSIndexPath indexPathForRow:(indexPath.row+1) inSection:indexPath.section]; 
UITableViewCell *cellNextRow = (UITableViewCell *)[self.myTableView cellForRowAtIndexPath:indexPathNextRow]; 
UITextField *textFieldNextRow = (UITextField *)[cellNextRow.contentView viewWithTag:kTAG_TEXTFIELD]; 

espero que ayude!

+0

En iOS7, deberá reemplazar textField.superView.superView con textField.superView.superView.superView – Homam

Cuestiones relacionadas