У меня очень странная проблема с UITableview в контроллере навигации на симуляторе iPhone. Из отображаемых ячеек правильно отображаются только некоторые. Предполагается, что все они выглядят одинаково, но большинству не хватает установленного мной аксессуара, прокручивая вид, который показывает, какая ячейка имеет аксессуар, поэтому я подозреваю, что происходит какое-то кэширование ячеек, хотя содержимое каждой ячейки корректно. Я также установил изображение в качестве фона, и оно также отображалось только время от времени, но я исправил это, изменив
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yellow-bar_short.png"]];
(который также отображал только случайную ячейку с фоном) до
cell.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"yellow-bar_short.png"]];
Теперь мне нужно исправить проблему, когда аксессуар отображается только в случайной ячейке. Я попытался переместить код из cellForRowAtIndex в willDisplayCell, но это не имело никакого значения. Я вставил в журнал команду, чтобы подтвердить, что она проходит через каждый кадр.
По сути, это табличное представление (UITableViewCellStyleSubtitle), которое получает информацию от сервера и затем обновляется методом делегата, вызывающим перезагрузку. Код:
-(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];
}
Я включил только тот код, который, на мой взгляд, был актуален, может предоставить больше, если это необходимо. Я пока не могу протестировать его на iPhone, поэтому не знаю, может быть, это просто аномалия симулятора или ошибка в моем коде. Я всегда получал хорошие отзывы от вопросов, какие-либо идеи?