编辑:更新代码以完成我想要做的事情。
我有一个表视图,我想在其中动态地将一组视图加载到行中。
例如,如果我的数组中有两个对象:{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];
答案 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];
这可能对你有所帮助。