я был бы, чтобы иметь альтернативные 2 цвета строк, как первый черный цвет, второй белый, третий черный цвет цвет, и т.д., и т.д...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
cell = ((MainCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]);
if (cell==nil) {
NSArray *topLevelObjects=[[NSBundle mainBundle] loadNibNamed:@"MainCell" owner:self options:nil];
for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
if ((indexPath.row % 2)==0) {
[cell.contentView setBackgroundColor:[UIColor purpleColor]];
}else{
[cell.contentView setBackgroundColor:[UIColor whiteColor]];
}
cell = (MainCell *) currentObject;
break;
}
}
}else {
AsyncImageView* oldImage = (AsyncImageView*)
[cell.contentView viewWithTag:999];
[oldImage removeFromSuperview];
}return cell;
Проблема состоит в том, что, когда я делаю быструю прокрутку, фон ячеек становится как последние 2 черные ячейки, первые 2 белые ячейки или что-то вроде этого, но если я прокручиваю медленный, хорошо работает. Я думаю, что проблемой является кэш reusableCell.
Какие-либо идеи?
TIA
Ячейки перерабатываются (это то, что вы делаете, когда удаляете их из очереди и проверяете, равно ли нулю). Поэтому вместо того, чтобы устанавливать цвет фона при создании ячейки, установите его через некоторое время. Итак:
if( !cell ) {
// create the cell and stuff
}
if( [indexPath row] % 2)
[cell setBackgroundColor:[UIColor whiteColor]];
else
[cell setBackgroundColor:[UIColor purpleColor]];
Я считаю, что происходит то, что когда вы удаляете из очереди повторно используемую ячейку, вы делаете это не в определенном порядке. Когда вы медленно прокручиваете, ячейки становятся доступными по одной и удаляются вам из очереди по порядку. При быстрой прокрутке порядок становится неопределенным, как и порядок их удаления из очереди. Я считаю, что именно поэтому (по большей части) Apple разработала UITableView API для удаления из очереди по идентификатору, чтобы вы могли легко повторно использовать различные типы ячеек, например, с разными цветами. Поэтому я рекомендую изменить код, чтобы у каждого цвета ячейки был свой идентификатор. (Кроме того, если возможно, создайте выход, соединяющий этот источник данных tableview напрямую с ячейкой, или сохраните его в ivar после его однократной загрузки, а затем скопируйте его, а не циклически переходите по объектам высокого уровня)