2016-06-10 3 views
0

У меня есть два вида ячеек таблицы, скажем, платные и неоплаченные. У меня есть флажки слева, в неоплаченные ячейки. Когда таблица впервые загружена, все ячейки находятся в правильном формате. , но когда я прокручиваю вверх, когда ячейки выходят из экрана и выходят на экран bak, их содержимое изменяется. Показывая изображения. enter image description hereСодержимое ячейки таблицы просмотра изменяется, когда ячейка уходит с экрана

и после прокрутки вверх и вниз я получаю это.

enter image description here

это действительно сложно. я искал SO, но безрезультатно.

Мой код ниже:

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


    data1 = [[responseDict valueForKey:@"cases"]objectAtIndex:indexPath.section]; 
    data1 = [data1 valueForKey:@"procedures"]; 
    data1 = [data1 objectAtIndex:indexPath.row]; 
    //[[[valueForKey:@"paid"]objectAtIndex:indexPath.row]valueForKey:@"procedures"]; 
    static NSString *CellIdentifier = @"Cell"; 

     //if ([payemtStr isEqual:@"0"]) { 
     //UnpiadCell 



     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     // Configure the cell... 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     } 


    UIButton * checkBtn= (UIButton *)[cell viewWithTag:101]; 
    UILabel *payToLbl = (UILabel *)[cell viewWithTag:100]; 
    UIButton * expandBtn= (UIButton *)[cell viewWithTag:106]; 

    if ([[data1 valueForKey:@"paid"]boolValue] ==1) { 
     payToLbl.text = @""; 
     [checkBtn setHidden:YES]; 
     [expandBtn setHidden:YES]; 
     cell.contentView.backgroundColor = [UIColor whiteColor]; 
    } 
    else { 
    payToLbl.text = @"Pay to"; 
     [checkBtn addTarget:self action:@selector(checkBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
     [expandBtn addTarget:self action:@selector(collapseExpandButtonTap:) forControlEvents:UIControlEventTouchUpInside]; 
     if([[[selectedCellsArray objectAtIndex:indexPath.section]objectAtIndex:indexPath.row ] isEqualToString:@"Uncheck"]) 
      [checkBtn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
     else 
      [checkBtn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
     // [[expandCellsArray objectAtIndex:indexPath.row] isEqualToString:@"Expand"] 
     if([[[expandCellsArray objectAtIndex:indexPath.section]objectAtIndex:indexPath.row ] isEqualToString:@"Expand"]) 
      [expandBtn setImage:[UIImage imageNamed:@"collapse.png"] forState:UIControlStateNormal]; 
     else 
      [expandBtn setImage:[UIImage imageNamed:@"expand.png"] forState:UIControlStateNormal]; 

//  if ([selectedCellsArray containsObject:@"Check"]) { 
//   self.payBtn.hidden = NO; 
//  } 
//  else { 
//   self.payBtn.hidden = YES; 
//  } 

    } 


    UILabel *mainTitleLbk = (UILabel *)[cell viewWithTag:102]; 
    mainTitleLbk.textColor= [UIColor blackColor]; 
    mainTitleLbk.text = [data1 valueForKey:@"provider"]; 
    ((UILabel *)[cell viewWithTag:103]).text = [data1 valueForKey:@"description"]; 
    ((UILabel *)[cell viewWithTag:104]).text = [NSString stringWithFormat:@"%@ %@ ", 
               [data1 valueForKey:@"line_1"], 
               [data1 valueForKey:@"line_2"] 
               ]; 
    ((UILabel *)[cell viewWithTag:109]).text = [NSString stringWithFormat:@"%@, %@", [data1 valueForKey:@"city"],[data1 valueForKey:@"state"]]; 

    // [data1 valueForKey:@"zip"] 
    ((UILabel *)[cell viewWithTag:105]).text = [NSString stringWithFormat:@"%@ ,%@" ,[data1 valueForKey:@"zip"],[data1 valueForKey:@"phone"]]; 
    // handeling check uncheck buttons 
    return cell; 


} 
+0

Ячейки повторно используются, поэтому вам нужно установить все атрибуты в своих предложениях if и else. Например, вы устанавливаете элементы в скрытые в if, но не устанавливаете их, чтобы они не были скрыты в else. Также вы добавляете цель кнопки каждый раз; при повторном использовании ячеек вы получите многократно добавленное действие. – Paulw11

ответ

1

UITableViewCell повторно используется каждый раз, когда появляется новая строка. Поэтому после прокрутки вверх и вниз первая строка не является вновь созданным UITableviewCell. Добавление 2-х строк кода может устранить проблему:

{ 
payToLbl.text = @"Pay to"; 
[checkBtn setHidden:NO]; 
[expandBtn setHidden:NO]; 
....... 

Просьба также удалить эти действия с помощью кнопок.

+0

это сработало спасибо – Logic