在UITableviewCell中管理视图

时间:2013-12-17 03:31:43

标签: ios uitableview

编辑:更新代码以完成我想要做的事情。

我有一个表视图,我想在其中动态地将一组视图加载到行中。

例如,如果我的数组中有两个对象:{UITextField object, UIImage image}我希望第一行显示文本字段,第二行显示图像。我不知道如何刷新/管理内容,所以他们不会互相添加。当我滚动时,图像和文本字段会在队列中重复使用时相互叠加。

让我们假设我的项目数组名为arrayOfItems,并包含我想要显示的文本字段或图像列表。

根据以下答案,下面的代码有效。

[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

for (id obj in [cell.contentView subviews]) {
    [obj removeFromSuperview];
}

[cell.contentView addSubView:[self.arrayOfItems objectAtIndex:indexPath.row];

4 个答案:

答案 0 :(得分:1)

我认为您应该自定义两个不同的UITableView单元格。

并在CellForRowAtIndexPath

NSInteger row = indexPath.row;
if(row%2 ==0){
    // register your UITextField cell
}else{
    // register your UIImage View cell
}

我认为这是一种更好的方法。

答案 1 :(得分:0)

为子视图添加标记,如果重用该单元格则将其删除:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle     reuseIdentifier:@"MyIdentifier"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
else
{
    UiView* view = [cell viewWithTag:1907];
    [view removeFromSuperView];
}
    UiView* view = [self.arrayOfItems objectAtIndex:indexPath.row];
    view.tag = 1907;
    [cell addSubView:view];

    return cell;
}

答案 2 :(得分:0)

您始终可以初始化tableviewcell。这将清除/刷新单元格。

使用:

UITableViewCell *cell = cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle     reuseIdentifier:@"MyIdentifier"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

而不是:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle     reuseIdentifier:@"MyIdentifier"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

我希望这会奏效。

答案 3 :(得分:0)

在将对象添加到cell.contentView

之前添加此行
for (id obj in [cell.contentView subviews]) {
    [obj removeFromSuperview];
}

然后在cell.contentView上添加你的对象,如下所示

[cell.contentView addSubView:[self.arrayOfItems objectAtIndex:indexPath.row];

这可能对你有所帮助。