Ram Mishra
Ram Mishra

Reputation: 797

Why UITableView cell overlap while scrolling?

I have a UITableView with approx 100 row.

Each cell having checked image but when we scroll the UITableView, all the cells overlapped in unchecked cell.

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

        }

Upvotes: 2

Views: 1574

Answers (2)

Lord Zsolt
Lord Zsolt

Reputation: 6557

Your code is very wrong... As I can see, you're creating your cell through interface builder. In that case, you create your custom UITableViewCell class for it, which will have IBOutlets to your UILabels and UIImageViews (and other UI elements you'd like). This will make sure your UI elements get created for you and you don't have to alloc-init and addSubview in your cellForRow method.

It would take fairly long to explain everything here, so you could take a look at this tutorial, it explains how to create custom UITableViewCells better then I could. Mainly Option 2: Prototype Cells is what you need.

Upvotes: 1

iSmita
iSmita

Reputation: 1292

Add this code in 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];

Hope this will Help you.Thank you in advance.

Upvotes: 3

Related Questions