UITableViewCell中的第三个标签混淆了文本

时间:2014-08-10 17:01:17

标签: ios uitableview parse-platform

![在此处输入图像说明] [1]我试图在我的UITableViewCell中添加第三个标签,最初我尝试将其添加到CellForRowAtIndexPath方法并且有效,但是当我向下滚动并备份时,由于某种原因,第三个标签中的文字都混乱了。我使用PFQueryTableViewController加载单元格。

这是我的代码:

if([people count] > 0){
    user = people[0];
    }
    if(user){
        if([object objectForKey:@"itemName"]!=nil){
            cell.textLabel.text = [object objectForKey:@"itemName"];
        }
        cell.textLabel.textColor = listColor;
        cell.detailTextLabel.text = [NSString stringWithFormat:@"City: %@",[user objectForKey:@"city"]];
        cell.detailTextLabel.textColor = listColor;
        cell.detailTextLabel.font = [UIFont fontWithName:@"Avenir" size:10.0f];

        UILabel *mainLabel = [[UILabel alloc]initWithFrame:CGRectMake(115, 50.0, 220.0, 15.0)];
        mainLabel.textColor = listColor;


        mainLabel.font = [UIFont fontWithName:@"Avenir" size:10.0f];
        //mainLabel.textAlignment = NSTextAlignmentLeft;

        [mainLabel setText: [NSString stringWithFormat:@"By: %@",[user username]] ];
        [cell.contentView addSubview:mainLabel];


    }

知道怎么解决这个问题吗?它严格地说是第三个标签,只有在用户向下滚动然后向上滚动后才会发生

2 个答案:

答案 0 :(得分:2)

您似乎一直在添加UILabel。因此,当您滚动时,UITableViewCell会被回收,您只需添加另一个UILabel。最佳解决方案是将UITableViewCell子类化为在您的子类UILabel的{​​{1}}方法中添加第三个init

另一种解决方案是在添加新版本之前更改UITableViewCell以删除旧setThirdLabel。但是,我建议你只更新文本,因为风格一直都是一样的。

编辑:一个例子(未经测试,只是为了得到这个想法)

.h文件:

UILabel

.m文件:

@interface CustomTableViewCell : UITableViewCell
{
    @private
        UILabel *anotherLabel;
}

- (void)setAnotherLabelText:(NSString *)text;

如果你这样做了,你可以使用这样的代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self)
    {
        // Set up the label
        anotherLabel = [[UILabel alloc] init];

        // Set some initial style here
        anotherLabel.textAlignment = NSTextAlignmentCenter;
        anotherLabel.textColor = [UIColor colorWithRed];            

        // Add the label to the cell
        [self addSubview:anotherLabel];
    }

    return self;
}

- (void)layoutSubviews
{
    // Dont forget this or weird things will happen
    [super layoutSubviews];

    // Move your label to its final position
    anotherLabel.frame = CGRectMake(0.0f, 20.0f, 200.0f, 30.0f);
}

- (void)setAnotherLabelText:(NSString *)text
{
    _anotherLabel.text = text;
}

答案 1 :(得分:0)

到目前为止,这对我有用:

如果没有第三个标签,单元格上总共有3个子视图(一个UIImageView,另外两个标签)...所以我说如果cell.contentView的子视图的数量小于4,那么添加一个子视图。否则,已有子视图,所以什么都不做