J'ai un problème très étrange avec une UITableview dans un contrôleur de navigation sur le simulateur de l'iPhone. Parmi les cellules affichées, seules certaines sont correctement affichées. Ils sont tous censés avoir la même apparence mais la plupart manquent l'accessoire que j'ai défini, le défilement de la vue change la cellule qui a l'accessoire donc je suspecte qu'il se passe une sorte de cache cellulaire, bien que le contenu soit correct pour chaque cellule. J'ai aussi mis une image en arrière-plan et qui était aussi que l'affichage de façon sporadique mais je fixe en changeantProblème de rendu avec UITableview
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yellow-bar_short.png"]];
(qui a également que rendu une cellule aléatoire avec l'arrière-plan) pour
cell.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"yellow-bar_short.png"]];
I maintenant besoin de résoudre le problème avec l'accessoire ne montrant que sur une cellule aléatoire. J'ai essayé de déplacer le code de cellForRowAtIndex à willDisplayCell mais cela n'a fait aucune différence. J'ai mis dans une commande de journal pour confirmer qu'il traverse chaque trame.
Fondamentalement, c'est une vue de table (UITableViewCellStyleSubtitle) qui obtient ses informations à partir d'un serveur & est ensuite mis à jour par une méthode de délégué appelant reload. Code est:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%@", [NSString stringWithFormat:@"Setting colours for cell %i", indexPath.row]);
// Set cell background
// cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yellow-bar_short.png"]];
cell.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"yellow-bar_short.png"]];
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
// detailTableViewAccessory is a view containing an imageview in this view's nib
// i.e. nib <- view <- imageview <- image
cell.accessoryView = detailTableViewAccessory;
}
// Called by data fetching object when done
-(void)listDataTransferComplete:(ArticleListParser *)articleListParserObject
{
NSLog(@"Data parsed, reloading detail table");
self.currentTotalResultPages = (((articleListParserObject.currentArticleCount - 1)/10) + 1);
self.detailTableDataSource = [articleListParserObject.returnedArray copy]; // make a local copy of the returned array
// Render table again with returned array data (neither of these 2 fixed it)
[self.detailTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
// [self.detailTableView reloadData];
// Re-enable necessary buttons (including table cells)
letUserSelectRow = TRUE;
[btnByName setEnabled:TRUE];
[btnByPrice setEnabled:TRUE];
// Remove please wait message
NSLog(@"Removing please wait view");
[pleaseWaitViewControllerObject.view removeFromSuperview];
}
Je ne code inclus que je pensais était pertinent, peut fournir plus si nécessaire. Je ne peux pas encore le tester sur un iPhone, donc je ne sais pas si c'est peut-être juste une anomalie de simulateur ou un bug dans mon code. J'ai toujours eu de bons retours de questions, des idées?