UITableCellView.contentView中的标签在使用自动调整时显示两次

时间:2011-12-19 19:08:20

标签: ios uitableview

我使用Grouped UITableView并添加UITableViewCells两个UILabel并将它们添加到单元格的contentView中。我也在我的应用程序中在这个UITableView上实现了编辑模式。

我用的是 lblDetail.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;为了减少文字的宽度,以便在编辑模式下显示的删除红色按钮不会覆盖我的文字。

现在我看到的是当我不在编辑模式下滚动表格时,标签会显示两次,就好像它处于编辑模式并且同时处于编辑模式之外。

这是代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    }


    CGRect DetailLabelFrame = CGRectMake(52, 25, 200, 35);
    CGRect TitleLabelFrame = CGRectMake(52, 5, 200, 25);

    lblDetail = [[UILabel alloc]init];
    lblTitle = [[UILabel alloc]init];

    lblDetail.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
    lblTitle.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;

    lblDetail.frame = DetailLabelFrame;
    lblDetail.lineBreakMode = UILineBreakModeWordWrap;
    lblDetail.backgroundColor = [UIColor clearColor];
    lblDetail.numberOfLines = 2;

    lblTitle.frame = TitleLabelFrame;    
    lblTitle.backgroundColor = [UIColor clearColor];
    lblTitle.frame = TitleLabelFrame;

    [lblDetail setFont:[UIFont fontWithName:@"Arial" size:14]];
    [lblTitle setFont:[UIFont fontWithName:@"Arial-BoldMT"  size:15]];

    lblDetail.textAlignment = UITextAlignmentRight;
    lblTitle.textAlignment = UITextAlignmentRight;

    lblTitle.text = @"054-9700583"; 
    lblDetail.text = @"שאלה:במה אפשר לעזור לך?";

   [cell.contentView addSubview:lblDetail];
   [cell.contentView addSubview:lblTitle];

    cell.imageView.layer.masksToBounds = YES;
    cell.imageView.layer.cornerRadius = 5.0;
    cell.imageView.image = [UIImage imageNamed:@"girl.png"];

    [lblDetail release];
    [lblTitle release];

    return cell;
}

2 个答案:

答案 0 :(得分:1)

如果仅在滚动时发生这种情况,可能是因为在重复使用单元格时,除了重用单元格中已有的标签外,还会创建一组新的标签。

您可以尝试将这两行移到if(cell == nil)块中:

lblDetail = [[UILabel alloc]init];
lblTitle = [[UILabel alloc]init];

这样当一个单元被重用时,它将继续使用现有的lblDetail和lblTitle,而不是创建一个新单元。

答案 1 :(得分:1)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];


CGRect DetailLabelFrame = CGRectMake(52, 25, 200, 35);
CGRect TitleLabelFrame = CGRectMake(52, 5, 200, 25);

lblDetail = [[UILabel alloc]init];
lblTitle = [[UILabel alloc]init];

lblDetail.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
lblTitle.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;

lblDetail.frame = DetailLabelFrame;
lblDetail.lineBreakMode = UILineBreakModeWordWrap;
lblDetail.backgroundColor = [UIColor clearColor];
lblDetail.numberOfLines = 2;

lblTitle.frame = TitleLabelFrame;    
lblTitle.backgroundColor = [UIColor clearColor];
lblTitle.frame = TitleLabelFrame;

[lblDetail setFont:[UIFont fontWithName:@"Arial" size:14]];
[lblTitle setFont:[UIFont fontWithName:@"Arial-BoldMT"  size:15]];

lblDetail.textAlignment = UITextAlignmentRight;
lblTitle.textAlignment = UITextAlignmentRight;
[cell.contentView addSubview:lblDetail];
[cell.contentView addSubview:lblTitle];

lblDetail.tag = 10;
lblTitle.tag = 11;

}


lblDetail = (UILabel*)[cell.contentView viewWithTag:10];

lblTitle = (UILabel*)[cell.contentView viewWithTag:11];

lblTitle.text = @"054-9700583"; 
lblDetail.text = @"שאלה:במה אפשר לעזור לך?";

cell.imageView.layer.masksToBounds = YES;
cell.imageView.layer.cornerRadius = 5.0;
cell.imageView.image = [UIImage imageNamed:@"girl.png"];

[lblDetail release];
[lblTitle release];

return cell;
}

你的细胞内容重叠可能会对你有所帮助。现在如果你遇到同样的问题,不要犹豫地敲我。