2011-04-27 17 views
5

Tengo una tabla con las entradas que el usuario puede seleccionar y al hacer clic sobre ellas, UILabel debe cambiar a UITextField para que el usuario pueda editar el valor de esa fila.iPhone: modifique una celda seleccionada en didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(indexPath.section == 1 && 
     indexPath.row < [item.entries count]) 
    { 
     ListDetailCell *tmpCell = ((ListDetailCell*)[self tableView:tvEntries cellForRowAtIndexPath:indexPath]); 
     tmpCell.lbTitle.hidden = true; // <- cell to hide 
     tmpCell.tfTitle.hidden = false; // <- textfield to show 
    } 
} 

Por alguna razón, parece que mis cambios en los controles no se aplican.

¿Algún consejo aquí? Thx advance

+0

No sé si es apropiado en su caso, pero ¿no podría simplemente usar un UITextField con un marcador de posición en lugar de un UILabel? –

+0

Sí, ya pensé en esto. Pero hasta donde sé, no puedo hacer que un campo de texto se vea como una etiqueta simple (sin borde) – Max

Respuesta

0

Mi solución fue finalmente a. inserte un indicador adicional que me dice si estoy en modo de edición o no. En cellForRowAtIndexPath estoy verificando este indicador y estableciendo la visibilidad de Label/Textfield.

No es realmente una manera adecuada, pero me salvó de gastar algunas horas más sobre este tema.

Gracias por sus sugerencias.

7

¿Ha intentado llamar al reloadRowsAtIndexPaths:withRowAnimation: después de aplicar sus actualizaciones? Al igual que:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(indexPath.section == 1 && 
     indexPath.row < [item.entries count]) 
    { 
     ListDetailCell *tmpCell = ((ListDetailCell*)[self tableView:tvEntries cellForRowAtIndexPath:indexPath]); 
     tmpCell.lbTitle.hidden = true; // <- cell to hide 
     tmpCell.tfTitle.hidden = false; // <- textfield to show 

     //reload the cell 
     [tableView reloadRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] 
     withRowAnimation: UITableViewRowAnimationNone]; 
    } 
} 

En general, las actualizaciones realizadas a una célula que se muestra no aparecerán a menos que se indique explícitamente la mesa para recargar la celda (o volver a cargar todo llamando reloadData

+0

a pesar del hecho, no había conectado mi UITextField, la recarga de la celda (intenté 'reloadData',' reloadInputViews' y 'reloadRowsAtIndexPath') no funcionó para mí. – Max

Cuestiones relacionadas