Accesorio tick en uitableviewcell que no muestra en algunos casos

Tengo dos vistas de tabla, una tiene varias celdas de vista de tabla, cada celda abre la misma subvista pero initaliza con nuevos datos …

Hay alnetworkingedor de 100 a 200 inputs en la tabla y tengo una vista de accesorios que es una marca que cuando se selecciona una celda, marca la celda y luego vuelve a cargar la vista principal.

Si selecciono la misma celda para get el mismo set de datos, cargará la celda previamente seleccionada en el centro de la pantalla (para que conozca su ruta de índice), sin embargo, la marca "dependiendo de qué tan profundo en la list" será o no será visible La

Tiende a funcionar aproximadamente en el 30/40% superior de la tabla, pero cualquier cosa que baje la marca no será visible … es decir, a less que vaya y vaya cada vez más profundo cada vez, entonces a veces puedo hacer que aparezca la marca en la parte más profunda de la tabla … ¿Alguien sabría por qué está sucediendo esto?

¿Alguien ha tenido algo de esta naturaleza antes?

En una investigación más profunda, creo que algo va mal dentro de este método.

En primer lugar, en la subvista una vez que el usuario selecciona una celda a la que se llama este método

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Navigation logic may go here. Create and push another view controller. [self.navigationController popViewControllerAnimated:YES]; //pops current view from the navigatoin stack //accesses selected cells content UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; // now you can use cell.textLabel.text //This if statment is based off which cell was selected in the parent view so that it knows which cell to pass the data back to if (parentViewSelectedIndexPath.section == 0) { if (parentViewSelectedIndexPath.row == 0) { manufactureCellTextLabel = cell.textLabel.text; //passing label text over to NSString for use with delegate (check "viewwilldissapear") [[self delegate] setManufactureSearchFields:manufactureCellTextLabel withIndexPath:indexPath]; //This is where I pass the value back to the mainview } // a few more If statements for the other methods I can pass data too. //--- this if block allows only one cell selection at a time if (oldCheckedData == nil) { // No selection made yet oldCheckedData = indexPath; [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; } else { UITableViewCell *formerSelectedcell = [tableView cellForRowAtIndexPath:oldCheckedData]; // finding the already selected cell [formerSelectedcell setAccessoryType:UITableViewCellAccessoryNone]; [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; // 'select' the new cell oldCheckedData = indexPath; } } 

Esto pasa la ruta de índice al método de vista principal …

  - (void) setManufactureSearchFields:(NSString *)cellLabeltext withIndexPath:(NSIndexPath *)myIndexPath { manufactureSearchObjectString = cellLabeltext; manufactureResultIndexPath = myIndexPath; [self.tableView reloadData]; //reloads the tabels so you can see the value. } 

// Que luego establece the manufactureResultIndexPath que se usa en el siguiente método para devolverlo a la subvista

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Navigation logic may go here. Create and push another view controller. //--- Idendify selected indexPath (section/row) if (indexPath.section == 0) { //--- Get the subview ready for use VehicleResultViewController *vehicleResultViewController = [[VehicleResultViewController alloc] initWithNibName:@"VehicleResultViewController" bundle:nil]; // ... //--- Sets the back button for the new view that loads self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordenetworking target:nil action:nil] autorelease]; // Pass the selected object to the new view controller. [self.navigationController pushViewController:vehicleResultViewController animated:YES]; [vehicleResultViewController setDelegate:self]; if (indexPath.row == 0) { vehicleResultViewController.title = @"Manufacture"; [vehicleResultViewController setRequestString:@"ID.xml"]; //sets the request string in searchResultsViewController vehicleResultViewController.dataSetToParse = @"ID"; // This is used to controll what data is shown on subview... logic [vehicleResultViewController setAccessoryIndexPath:manufactureResultIndexPath]; //sends indexpath back to subview for accessory tick vehicleResultViewController.parentViewSelectedIndexPath = indexPath; } //etc etc } 

Y finalmente lo paso al método en mi subvista que pasa la ruta de índice a oldCheckedData

 - (void)setAccessoryIndexPath:(NSIndexPath *)myLastIndexPath { oldCheckedData = myLastIndexPath; [self.tableView reloadData]; //<<---- this is where I reload the table to show the tick... } 

Solutions Collecting From Web of "Accesorio tick en uitableviewcell que no muestra en algunos casos"

Intente mover cell.accessoryType = líneas a la function willDisplayCell: delegar así:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // You can move this one here too: cell.selectionStyle = UITableViewCellSelectionStyleNone; // no blue selection if (indexPath == oldCheckedData) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } } 

Leí que el método willDisplayCell: se debe utilizar para cualquier modificación visual relacionada con una celda como selectionStyle / accessoryType y el método cellForRowAtIndexPath: método para operaciones relacionadas con datos de celda como configuration de text, imágenes, etc.