¿Cómo creo filas con colors alternativos para un UITableView en iPhone?

Me gustaría tener 2 colors alternativos de filas, como el primer negro, el segundo blanco, el tercero negro, etc., etc.

- (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; 

El problema es que cuando hago un desplazamiento rápido, los backgrounds de las celdas se vuelven como los últimos 2 celdas negros, los primeros 2 celdas blancos o algo así, pero si me desploop lento funciona bien. Creo que el problema es el caching de Cell reutilizable.

¿Algunas ideas?

TIA

Las células se reciclan (eso es lo que haces cuando las dejas y revisas si es nulo). Entonces, en lugar de establecer el color de background cuando crea la celda, configúrelo en algún momento después. Asi que:

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

Lo que creo que está sucediendo es que cuando elimina una celda reutilizable, no lo hace en un order definido. Como sucedería, cuando se desplaza lentamente, las celdas estarán disponibles una a la vez, y se deshacerán de usted, en order. Cuando se desplaza rápidamente, el order se vuelve indefinido, al igual que el order en que se eliminan. Creo que esta es la razón por la que (en gran parte) Apple diseñó la API UITableView para eliminar por el identificador, por lo que podría reutilizar fácilmente diferentes types de células, como las de colors diferentes. Como tal, recomiendo modificar el código para que cada color de celda tenga su propio identificador. (Además, si es posible, tenga una salida que conecte esta fuente de datos de tableview a la celda directamente, o guárdela en un ivar después de cargarla una vez, y luego cópiela en lugar de desplazarse por objects de alto nivel)