我有一个tableView,它包含已解析的数据。如果我点击我的表格视图单元格。表格视图中的文本标签被重叠,它上面显示一个黑色的黑点。下面是屏幕截图和代码
- (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];
}
答案 0 :(得分:1)
您的问题是每次显示单元格时都会添加新标签和图像视图 当你必须创建一个新的单元格时,你应该这样做一次,因为你没有从未使用的单元格队列中获取一个单元格。
“黑点”是两对UILabel。向上和向下滚动表格以查看相同的内容。
将您的UI *分配移动到if (cell == nil)
并在if语句之外配置它们。
像这样:
- (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;
}