2013-11-21 3 views
2

У меня есть UITableView с приблизительно 100 рядами.Почему ячейка UITableView перекрывается при прокрутке?

Каждая ячейка, имеющая проверочное изображение, но когда мы прокручиваем UITableView, все ячейки перекрываются в непроверенной ячейке.

(UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *MyIdentifier = @"Cell"; 
static NSString *MyIdentifierAds = @"Cell1"; 

UITableViewCell *cell ; 

if (tableView==self.tblSeachMarketplace) { 
    if (indexPath.section==0) { 
     cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
//   if(cell== nil) 
//   { 
//    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]; 
//   } 

     UILabel* lblTitle = (UILabel *)[cell viewWithTag:200]; 
     UILabel*lblSubheading = (UILabel *)[cell viewWithTag:300]; 
     UIImageView* imgRating = (UIImageView *)[cell viewWithTag:400]; 
     UIImageView* imgLogo = (UIImageView *)[cell viewWithTag:100]; 
     [lblTitle setFont:[UIFont fontWithName:@"Lato-Bold" size:12.5f]]; 
     [lblSubheading setFont:[UIFont fontWithName:@"Lato-Bold" size:9.0f]]; 
     [lblTitle setFont:[UIFont fontWithName:@"Lato-Bold" size:12.5f]]; 
     [lblSubheading setFont:[UIFont fontWithName:@"Lato-Bold" size:9.0f]]; 
     [lblTitle setTextColor:[Global colorFromHexString:@"#4394d4"]]; 
     NSDictionary*row=[[NSDictionary alloc]init]; 
     cell.contentView.backgroundColor = [UIColor whiteColor]; 
     if (allMarketPlaceNewsletters.count>0) { 
      row=[allMarketPlaceNewsletters objectAtIndex:indexPath.row]; 
      NSString *imgUrl=[row valueForKey:@"logo"]; 
      if (imgUrl != (id)[NSNull null]) { 
       NSURL *urlTemp = [NSURL URLWithString:imgUrl]; 
       [imgLogo setImageWithURL:urlTemp placeholderImage:[UIImage imageNamed:@"placeholder.jpg"]]; 
      } 

      UIButton *btnLocationRight=(UIButton *)[cell viewWithTag:600]; 
      UIButton *btnLocationPlus=(UIButton *)[cell viewWithTag:500]; 

      if ([[row valueForKey:@"subscribed"] isEqualToString:@"Y"]) { 
       [btnLocationRight setHidden:NO]; 
       [btnLocationPlus setHidden:YES]; 
       cell.contentView.backgroundColor = [Global colorFromHexString:@"#f0f9fc"]; 
       [btnLocationRight setImage:[UIImage imageNamed:@"righbtn.png"] forState:UIControlStateNormal]; 
       [btnLocationRight setTag:indexPath.row]; 
    //   [btnLocationRight addTarget:self action:@selector(ButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
       // [cell addSubview:[self buttonWithMap:cell :@"righbtn.png":indexPath.row]]; 
      }else{ 
       cell.contentView.backgroundColor = [UIColor whiteColor]; 
       [btnLocationPlus setTag:indexPath.row]; 
       [btnLocationPlus addTarget:self action:@selector(ButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

       [btnLocationPlus setImage:[UIImage imageNamed:@"darkplusbtn.png"] forState:UIControlStateNormal]; 

       [btnLocationRight setHidden:YES]; 
       [btnLocationPlus setHidden:NO]; 
       // [cell addSubview:[self buttonWithMap:cell :@"darkplusbtn.png" :indexPath.row]]; 
      } 

      NSString *stars=[NSString stringWithFormat:@"%d.png",[[row valueForKey:@"rating"] intValue]]; 
      imgRating.image=[UIImage imageNamed:stars]; 

     } 
+0

Просьба указать, по крайней мере, код 'cellForRow'. –

+0

@LordZsolt: я добавил код. –

ответ

1

Ваш код очень не прав ... Как я вижу, вы создаете свою ячейку через построитель интерфейса. В этом случае вы создадите свой собственный класс UITableViewCell, который будет содержать IBOutlets вашим UILabels и UIImageViews (и другие элементы пользовательского интерфейса, которые вы хотите). Это гарантирует, что ваши элементы пользовательского интерфейса создаются для вас, и вам не нужно alloc-init и addSubview в вашем методе cellForRow.

Это займет довольно много времени, чтобы объяснить все здесь, так что вы можете взглянуть на this tutorial, в нем объясняется, как создать пользовательский UITableViewCells лучше, чем я мог. В основном Option 2: Prototype Cells - это то, что вам нужно.

+0

Хороший совет, спасибо Господу. И ваша ссылка слишком полезна. –

3

Добавьте этот код в cellForRowAtIndexPath

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews]; 
for (UIView *subview in subviews) 
{ 
    if([subview isKindOfClass:[UIView class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UIImageView class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UILabel class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UIImage class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UIButton class]]) 
     [subview removeFromSuperview]; 

} 
[subviews release]; 

Надеется, что это поможет you.thank вы заранее.

+0

Спасибо. Если это сработает для вас, то, пожалуйста, примите его, чтобы он помог другим. :) – Smita

+0

Мое голосование не засчитывается, потому что я новый пользователь в стеке, а моя репутация низкая. –

+0

У вас нет проблемы. :) – Smita

Смежные вопросы