У меня очень странная проблема с UITableview в контроллере навигации на симуляторе iPhone. Из отображаемых ячеек отображаются только некоторые из них. Все они должны выглядеть одинаково, но большинство из них не хватает аксессуара, который я установил, прокручивая изменения вида, у которых есть аксессуар, поэтому я подозреваю, что это какое-то кеширование клеток, хотя содержимое является правильным для каждой ячейки. Я также установить изображение в качестве фона, и что также отображает только спорадически, но я установил, что путем измененияПроблема с UITableview
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, но я не знаю, может быть, это просто аномалия симулятора или ошибка в моем коде. Я всегда получал хорошие отзывы от вопросов, любые идеи?