tableview单元格点击数据重叠

时间:2012-02-09 10:02:45

标签: ios cocoa-touch uitableview

我有一个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];

   }

enter image description here

1 个答案:

答案 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;
}