Reputation: 797
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
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
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