2012-10-12 204 views
6

Tengo un UITableView con celdas personalizadas. Esta celda personalizada se ve como una celda normal con Estilo "Detalle a la izquierda". Pero mi celda personalizada tiene una etiqueta de detalle y un campo de texto para permitir al usuario editar el texto. Tengo un botón Guardar donde quiero guardar todos los datos ingresados ​​por el usuario. Inventé la celda personalizada con este tutorial: http://agilewarrior.wordpress.com/2012/05/19/how-to-add-a-custom-uitableviewcell-to-a-xib-file-objective-c/#comment-4883indexPathForCell de UITableView: devuelve siempre 0 como indexPath.row

Para obtener los datos del usuario, establecí el delegado del campo de texto en el controlador de vista de tabla (self) e implementé el método textFieldDidEndEditing :. En este método, solicito la vista padre del campo de texto (= celda) y solicito el indexPath de esta celda. El problema es que siempre obtengo 0 para indexPath.row, sin importar qué celda edite. ¿Qué estoy haciendo mal?

Aquí está mi código:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:[CustomCell reuseIdentifier] forIndexPath:indexPath]; 
if (cell == nil) { 
    [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 
    cell = self.customCell; 
    self.customCell = nil; 
} 

cell.label.text = @"Some label text"; 
cell.editField.delegate = self; 
cell.accessoryType = UITableViewCellAccessoryNone; 

return cell; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
CustomCell *cell = (CustomCell *) textField.superview; 

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

NSLog(@"the section is %d and row is %d", indexPath.section, indexPath.row); 
... 
} 

EDIT: acabo de saber, que el indexPath devuelto es nulo. Entonces, si es nulo, obtengo los valores estándar 0, eso está bien. Pero ahora: ¿por qué obtengo nil para indexPath?

+0

Este es un hilo similar que dice el motivo de que http://stackoverflow.com/questions/6930026/tableviewindexpathforcell-returns-nil –

Respuesta

6

acabo de encontrar la solución a mí mismo. Encontré el código para la supervista en stackoverflow, así que simplemente lo copié. Pero eso no funciona. Necesita hacer dos superviews como este:

CustomCell *cell = (CustomCell *) textField.superview.superview; 

¡Ahora funciona bien!

0

Podría simplemente añadir una propiedad a su index CustomCell y rellenarla con indexPath.row dentro (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

+0

Buena idea, lo hice pero me sale un error que dice "selector no reconocido enviado a la instancia. .. [UITableViewCellContentView indexPath] "(Llamé a la propiedad indexPath). Por lo tanto, estoy un poco confundido acerca de por qué la celda ahora es una UITableViewCellContentView y no mi CustomCell. – tester