Подтвердить что ты не робот

Как создать строки с чередующимися цветами для UITableView на iPhone?

i будет иметь чередующиеся 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-элементный белый или что-то в этом роде, но если я прокручиваю медленные работы, отлично. Я думаю, что проблема заключается в кеше многократного использования.

Любые идеи?

ТИА

4b9b3361

Ответ 1

Ячейки перерабатываются (это то, что вы делаете, когда вы их деактивируете и проверяете, является ли оно нулевым). Поэтому вместо того, чтобы устанавливать цвет фона при создании ячейки, установите его когда-нибудь. Итак:

if( !cell ) {
  // create the cell and stuff
}
if( [indexPath row] % 2)
  [cell setBackgroundColor:[UIColor whiteColor]];
else
  [cell setBackgroundColor:[UIColor purpleColor]];

Ответ 2

Я считаю, что когда вы удаляете повторно используемую ячейку, вы не делаете этого в определенном порядке. Как это было бы, когда вы медленно прокручиваетесь, ячейки становятся доступными по очереди, и вам по очереди удаляют вас. Когда вы быстро прокручиваете, порядок становится undefined, как и порядок, в котором они выгружены. Я считаю, что именно поэтому (в значительной степени) яблоко разработало API UITableView для удаления по идентификатору - чтобы вы могли легко использовать различные типы ячеек, например, с разными цветами. Поэтому я рекомендую изменить код, чтобы каждый цвет ячеек имел свой собственный идентификатор. (Кроме того, если возможно, вы можете напрямую подключить этот источник данных таблицы к ячейке или сохранить его в ivar после его загрузки один раз, а затем скопировать, а не циклически перемещаться по объектам высокого уровня)