Я делал это, используя следующий метод UITableViewDelegate и устанавливая свойство cell.backgroundColor. Он вызывается последним, непосредственно перед тем, как ячейка будет фактически нарисована на экране:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row%2)
cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"TableCell-BG-Dark.png"]];
else
cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"TableCell-BG-Light.png"]];
}
И да, я использую пользовательский подкласс UITableViewCell.