2016-01-17 3 views
4

У меня есть 2 вида в моем UITableViewCell, и я хочу показать альтернативные представления в каждой ячейке (если предыдущая ячейка имеет правый вид ON, тогда следующая ячейка будет иметь вид слева).Показать альтернативные представления в каждом UITableViewCell - iOS

Я реализовал его успешно, но при прокрутке табличного вида чередующиеся представления не работают правильно; Пример изображения ниже:

problem image

Мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LiveStreamCell" forIndexPath:indexPath]; 

    if(cell == nil) 
    { 
     cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"LiveStreamCell"]; 
    } 


    UIView *leftView = (UIView*)[cell viewWithTag:999]; 
    UIView *rightView = (UIView*)[cell viewWithTag:998]; 

    UIImageView *mediaImage; 
    mediaImage.clipsToBounds = YES; 

    UILabel *artistLabel; 
    UILabel *titleLabel; 
    UILabel *statusLabel; 

    if (isViewOnLeft) { 

     isViewOnLeft = NO; 

     rightView.hidden = NO; 
     leftView.hidden = YES; 

     mediaImage = (UIImageView *)[cell viewWithTag:221]; 

     CALayer *cellImageLayer = mediaImage.layer; 
     [cellImageLayer setCornerRadius:74]; 
     [cellImageLayer setMasksToBounds:YES]; 

     artistLabel = (UILabel *)[cell.contentView viewWithTag:222]; 
     titleLabel = (UILabel *)[cell.contentView viewWithTag:223]; 
     statusLabel = (UILabel *)[cell.contentView viewWithTag:224]; 


    } 
    else { 

     isViewOnLeft = YES; 

     leftView.hidden = NO; 
     rightView.hidden = YES; 

     mediaImage = (UIImageView *)[cell viewWithTag:121]; 

     CALayer *cellImageLayer = mediaImage.layer; 
     [cellImageLayer setCornerRadius:74]; 
     [cellImageLayer setMasksToBounds:YES]; 

     artistLabel = (UILabel *)[cell.contentView viewWithTag:122]; 
     titleLabel = (UILabel *)[cell.contentView viewWithTag:123]; 
     statusLabel = (UILabel *)[cell.contentView viewWithTag:124]; 
    } 

    /*Here I'm setting image (come from web URLs) and labels data*/ 
} 

Раскадровка скриншот:

storyboard

Я знаю, что проблема с повторным использованием клеток, но я искал d много, но не повезло. Пожалуйста, предложите решение.

Спасибо!

+0

У меня нет ничего, чтобы добавить, но я просто хочу сказать, что созданный вами пользовательский интерфейс - это классный способ сделать временную шкалу. Хорошая работа! : D – user3353890

ответ

0

Вместо этого вы можете создать две ячейки представления таблицы и на основе indexPath, если это нечетно или даже загрузить левую или правую ячейку. Предполагая, что у вас есть странные, загружая левый вид изображения.

Таким образом вам просто нужно будет изменить код, выбирающий ячейку. Остальная часть остается прежней.

+1

Думаю, я понял, о чем вы говорите. Нужно ли мне создавать 2 прототипа ячеек (с уникальными идентификаторами) в раскадровке, причем первая ячейка имеет вид слева, а вторая ячейка имеет правильный вид в ней? – hyd00

+0

И да, это то, что мне нужно было сделать! Благодаря! : D – hyd00

+0

Правильно. Всего наилучшего. –