Reputation: 1553
I have a tableView and it contains parsed data in it.if I am click my table view cell.the textlabel in the table view is getting overlaped and it shows a dark black spot on it.below is the screenshot and the code.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
NSDictionary *boy=[self.media1 objectAtIndex:indexPath.row];
NSString *str=[[NSString alloc]initWithFormat:@"%@",boy];
NSInteger n=[str intValue];
NSLog(@"the value:%@",str);
if(n ==0)
{
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
starImage.image = [UIImage imageNamed:@"nostar.png"];
starImage.backgroundColor=[UIColor clearColor];
[cell.contentView addSubview:starImage];
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
CGRect labelFrame = CGRectMake(203,18, 20, 20);
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
Label.text=boo;
[cell.contentView addSubview:Label];
}
if(n >=1)
{
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
starImage.image = [UIImage imageNamed:@"1star.png"];
[cell.contentView addSubview:starImage];
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
CGRect labelFrame = CGRectMake(203,18, 20, 20);
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
Label.text=boo;
[cell.contentView addSubview:Label];
}
if(n >=2)
{
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
starImage.image = [UIImage imageNamed:@"twostar.png"];
[cell.contentView addSubview:starImage];
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
CGRect labelFrame = CGRectMake(203,18, 20,20);
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
Label.text=boo;
[cell.contentView addSubview:Label];
}
if(n >=3)
{
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
starImage.image = [UIImage imageNamed:@"threestar.png"];
[cell.contentView addSubview:starImage];
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
CGRect labelFrame = CGRectMake(203,18, 20,20);
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
Label.text=boo;
[cell.contentView addSubview:Label];
}
if(n >= 4)
{
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
starImage.image = [UIImage imageNamed:@"4star.png"];
[cell.contentView addSubview:starImage];
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
CGRect labelFrame = CGRectMake(203,18,20,20);
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
Label.text=boo;
[cell.contentView addSubview:Label];
}
if(n >= 5)
{
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
starImage.image = [UIImage imageNamed:@"5star.png"];
[cell.contentView addSubview:starImage];
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
CGRect labelFrame = CGRectMake(203,18, 20,20);
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
Label.text=boo;
[cell.contentView addSubview:Label];
}
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.text=[self.story objectAtIndex:indexPath.row];
cell.textLabel.numberOfLines=2;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
title=[self.story objectAtIndex:indexPath.row];
NSDictionary *detaildesc1=[self.descriptiondesc objectAtIndex:indexPath.row];
FirstViewDetailDetail *detailViewController1 = [[FirstViewDetailDetail alloc] initWithItem:detaildesc1 Title:title];
[self.navigationController pushViewController:detailViewController1 animated:YES];
[detailViewController1 release];
}
Upvotes: 0
Views: 476
Reputation: 90117
Your problem is that you add a new label and imageview each time a cell is displayed.
You should do this only one time, when you have to create a new cell because you didn't get one from the unused cells queue.
The "dark spot" are a couple of UILabels on top of each other. scroll the table up and down to see the same.
Move your UI* allocations into if (cell == nil)
and configure them outside of that if statement.
Like this:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// create a new cell
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
// create views here and add them to the cell.
CGRect starFrame = CGRectMake(217,6, 85, 40);
UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease];
// use tags to get the views later.
starImage.tag = 1021;
starImage.image = [UIImage imageNamed:@"nostar.png"];
starImage.backgroundColor=[UIColor clearColor];
[cell.contentView addSubview:starImage];
CGRect labelFrame = CGRectMake(203,18, 20, 20);
UILabel *label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease];
label.tag = 1022;
[cell.contentView addSubview:label];
// do all cell configuration here that is the same for all cells in your table
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.numberOfLines=2;
}
// whatever happened before you have a valid cell at this point
// get the imageView and label you added before
UIImageView *starImageView = [cell.contentView viewWithTag:1021];
UILabel *label = [cell.contentView viewWithTag:1022];
NSDictionary *boy=[self.media1 objectAtIndex:indexPath.row];
NSString *str=[[NSString alloc]initWithFormat:@"%@",boy];
NSInteger n=[str intValue];
UIImage *image = nil;
switch (n) {
case 0:
image = [UIImage imageNamed:@"nostar.png"];
break;
case 1:
image = [UIImage imageNamed:@"1star.png"];
break;
case 2:
image = [UIImage imageNamed:@"twostar.png"];
break;
case 3: /* more code here */
case 4: /* here */
case 5: /* and here */
}
starImageView.image = image;
NSString *boo=[[NSString alloc]initWithFormat:@"%d",n];
label.text = boo;
cell.textLabel.text=[self.story objectAtIndex:indexPath.row];
return cell;
}
Upvotes: 1