Impedir que UITableViewCells deje de eliminar y recargue

Actualmente estoy haciendo una aplicación que muestra el perfil del usuario. Para ese propósito, usé una UITableViewCell con celdas personalizadas para los diferentes types de datos (numbers de teléfono, direcciones de correo, etc.). Hay un máximo de 8 celdas por perfil.

El usuario puede editar su perfil de la manera más simple. Cuando se activa el modo de edición de la tabla, todas las tags editables son reemplazadas por campos de text. Y luego volteó a las tags cuando las modificaciones han finalizado.

Homever, parece haber un problema con las celdas que no son visibles. Cada vez que vuelven a aparecer en la vista, se vuelven a cargar, se vuelve a activar el método SetEditing: YES, etc … Debido a esto, todos los cambios realizados en el campo de text se pierden.

¿Hay alguna forma de evitar que tableview elimine las celdas no visibles y las vuelva a agregar? Solo hay ocho celdas, por lo que no consumirían muchos resources, y no tendría que save su estado cada vez que se realice un cambio.

PD: He intentado varias cosas con el método dequeueReusableCellWithIdentifier y los identificadores de cada celda, pero no he logrado lograr lo que quiero. Cada vez que oculto una celda, su contenido se actualiza.

En este caso, no se le ayuda con la reutilización de UITableView (la reutilización es, por supuesto, una gran cosa en la mayoría de los casos), pero tendrá demasiadas dificultades para preservar las ediciones. Para evitar la reutilización y preparar sus células de antemano.

Agregue un NSMutableArray o una propiedad NSMutableArray en su ViewController

 @property (nonatomic, strong) NSMutableArray *cells; 

En su vista, LoadLoad: prepare sus cells sin ninguna reuseIdentifier

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //Creates tableView cells. [self createCells]; } - (void)createCells { self.cells = [NSMutableArray array]; TCTimeCell *cellCallTime = [[TCTimeCell alloc] initWithTitle:@"CALL" forTimecard:_timecard andTimeEntryType:TCTimeEntryTypeCall]; [_cells addObject:cellCallTime]; TCTimeCell *cellLunchOut = [[TCTimeCell alloc] initWithTitle:@"LUNCH START" forTimecard:_timecard andTimeEntryType:TCTimeEntryTypeLunchOut]; [_cells addObject:cellLunchOut]; TCTimeCell *cellLunchIn = [[TCTimeCell alloc] initWithTitle:@"LUNCH END" forTimecard:_timecard andTimeEntryType:TCTimeEntryTypeLunchIn]; [_cells addObject:cellLunchIn]; TCTimeCell *cellSecondMealOut = [[TCTimeCell alloc] initWithTitle:@"2ND MEAL START" forTimecard:_timecard andTimeEntryType:TCTimeEntryTypeSecondMealOut]; [_cells addObject:cellSecondMealOut]; TCTimeCell *cellSecondMealIn = [[TCTimeCell alloc] initWithTitle:@"2ND MEAL END" forTimecard:_timecard andTimeEntryType:TCTimeEntryTypeSecondMealIn]; [_cells addObject:cellSecondMealIn]; TCTimeCell *cellWrapTime = [[TCTimeCell alloc] initWithTitle:@"WRAP" forTimecard:_timecard andTimeEntryType:TCTimeEntryTypeWrap]; [_cells addObject:cellWrapTime]; } 

Puedes llenar tu tableView desde este array.

 - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.cells.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ return self.cells[indexPath.row]; } 

Si tiene una tablaView seccionada, puede preparar sus celdas como una array of arrays . En ese caso, los methods de origen de datos deberían verse a continuación

 - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView{ return [self.cells count]; } - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.cells[section] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ return self.cells[indexPath.section][indexPath.row]; } 

Debe usar una celda estática no dinámica. Seleccione la vista de tabla y cambie la configuration como la image. introduzca la descripción de la imagen aquí

¡Y añada célula en el generador de interfaces!