表视图中的UILabel - 正确的方法?

时间:2012-06-26 14:29:53

标签: iphone uitableview xcode4 uilabel

我试图将UILabel实现到一个单元格中,当我向上和向下滚动表格几次时,我得到的是一些值的重叠。我使用ARC,因此在我想要的时候没有发布,所以我的问题是:将一个Label实现到tableView单元格的正确方法是什么?

Here is how it looks

- (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];


    }
     // Configure the cell...  

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1];
    cell.textLabel.highlightedTextColor = [UIColor colorWithRed:0.753 green:0.651 blue:0.1569 alpha:1]; 


    UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, cell.frame.size.width, cell.frame.size.height)];
    cellLabelS1.backgroundColor = [UIColor clearColor];
    cellLabelS1.font = [UIFont boldSystemFontOfSize:16];
    [cellLabelS1 setTextColor:[UIColor whiteColor]];


    [cellLabelS1 setText:temperatureString];
    temperatureString = nil;
    [cell addSubview:cellLabelS1];
    [[cell imageView]setImage:[UIImage imageNamed:imageFromCodeDay1]];
    [[cell textLabel]setText:cityString];

    return cell;

}

3 个答案:

答案 0 :(得分:2)

只有在没有标签的情况下才应向细胞添加标签。如果在第二次通过时重复使用细胞,则再次添加标签。 所以我的建议是在标签上设置标签,并尝试查看单元格contentView bass是否已经是标签。如果没有创建并添加它。

            UILabel *myLabel = (UILabel *)[cell.contentView viewWithTag:2002];
            if(!myLabel){
                myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 22)];
                myLabel.tag = 2002;
                [cell.contentView addSubview:myLabel];
            }
             myLabel.text = @"my new text";

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

        UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0,cell.frame.size.width, cell.frame.size.height)];
cellLabelS1.backgroundColor = [UIColor clearColor];
cellLabelS1.tag = 200; 
cellLabelS1.font = [UIFont boldSystemFontOfSize:16];
[cellLabelS1 setTextColor:[UIColor whiteColor]];
[cell addSubview:cellLabelS1];
}
 // Configure the cell...  

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1];
cell.textLabel.highlightedTextColor = [UIColor colorWithRed:0.753 green:0.651 blue:0.1569 alpha:1]; 

UILabel *cellLabelS1 = (UILabel*)[cell viewWithTag:200];
[cellLabelS1 setText:temperatureString];
temperatureString = nil;

[[cell imageView]setImage:[UIImage imageNamed:imageFromCodeDay1]];
[[cell textLabel]setText:cityString];

return cell;
}

这可能会对你有帮助....

答案 2 :(得分:0)

你的问题在于以下几点:

UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, cell.frame.size.width, cell.frame.size.height)];
cellLabelS1.backgroundColor = [UIColor clearColor];
cellLabelS1.font = [UIFont boldSystemFontOfSize:16];
[cellLabelS1 setTextColor:[UIColor whiteColor]];

当你从表格视图中获得一个重复使用的单元格时,它已经在其中包含了这个标签。只有在需要分配新单元格时,才能添加它以避免添加重复标签。但是,这可以使得从重用的单元格中检索标签非常复杂。

我个人建议在界面构建器中创建一个自定义UITableViewCell,并创建一个具有UILabel属性的自定义UITableViewCell子类。