在自定义单元格问题中添加UILabel

时间:2014-07-01 08:03:29

标签: ios iphone uitableview custom-cell

我的UITableView中有自定义单元格,根据字符串的值,我想在单元格中添加UILabel

这是我的单元格代码,

   -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSDictionary * tmpDictn = [tableAry objectAtIndex:indexPath.section];
        NSString * typeStr = [tmpDictn objectForKey:@“DocumentType”];

        NSString * cellIdentifier = @"TestCell";

        TestCell *cell = (TestCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

        if (!cell){
            cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

        if ([typeStr isEqualToString:@“Text”]) {
                    UILabel * textLbl = [[UILabel alloc] init];
                    textLbl.backgroundColor=[UIColor clearColor];
                    textLbl.textColor=[UIColor lightGrayColor];
                    textLbl.userInteractionEnabled=NO;
                    textLbl.numberOfLines = 0;
                    textLbl.font = [UIFont fontWithName:@“Helvetica" size:16];
                    [textLbl setFrame:CGRectMake(30, 20, 250, 25)];
                textLbl.text= [NSString stringWithFormat:@"%@ %i",[splitAry objectAtIndex:i],indexPath.section];
                    [cell addSubview:textLbl];
            }

        }

        return cell;
    }

我的UITableView包含5个单元格(动态)。并且只有第一个单元格应该有此标签(这也会根据文本更改)。此代码在第一个单元格中添加UILabel,但在第3个和第5个单元格中添加UILabel

我检查过它创建了一次UILabel {1}}并添加到第一,第三和第五单元格中。而“文本”仅在Tableary的第一个位置。

3 个答案:

答案 0 :(得分:1)

尝试为需要添加标签的单元格使用不同的单元格标识符,例如@ “TextCell”。否则,您正在重复使用已添加标签的单元格,即使它不应该在那里。或者,您可以在if ([typeStr isEqualToString:@“Text”])区块的“其他”条件下删除标签(如果有),但我认为前者更清晰。

答案 1 :(得分:1)

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSDictionary * tmpDictn = [tableAry objectAtIndex:indexPath.section];
        NSString * typeStr = [tmpDictn objectForKey:@“DocumentType”];

        NSString * cellIdentifier = @"TestCell";

        TestCell *cell = (TestCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

        if (!cell){
            cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }
          UILabel *lbl = [cell viewWithTag:1];
           if(lbl)
           {
              [lbl removeFromSuperView];
           }
        if ([typeStr isEqualToString:@“Text”]) {

                    UILabel * textLbl = [[UILabel alloc] init];
                    textLabel.tag = 1;
                    textLbl.backgroundColor=[UIColor clearColor];
                    textLbl.textColor=[UIColor lightGrayColor];
                    textLbl.userInteractionEnabled=NO;
                    textLbl.numberOfLines = 0;
                    textLbl.font = [UIFont fontWithName:@“Helvetica" size:16];
                    [textLbl setFrame:CGRectMake(30, 20, 250, 25)];
                textLbl.text= [NSString stringWithFormat:@"%@ %i",[splitAry objectAtIndex:i],indexPath.section];
                    [cell addSubview:textLbl];
            }

        }

        return cell;
}

答案 2 :(得分:0)

您正在使用

  

[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

您的代码的问题是表视图正在重用您的单元格。因此,当您的细胞数量增加时,它会出现在许多细胞中。

我是一个有点老程序员,但我认为最好的方法是

  

if(!cell)   {

     

cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

        //Add your label here.
     

}
  如果(!标签)   {//你的代码;

     

//如果您的条件未满足,请将标签文本设置为nil;

     

}

快速解决方案是将else和text设置为nil;

干杯。