Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITableviewCell中管理视图_Ios_Uitableview - Fatal编程技术网

Ios 在UITableviewCell中管理视图

Ios 在UITableviewCell中管理视图,ios,uitableview,Ios,Uitableview,编辑:更新代码以完成我想做的事情 我有一个表视图,我想在其中动态地将视图数组加载到行中 例如,如果数组中有两个对象:{UITextField object,UIImage image}我希望第一行显示文本字段,第二行显示图像。我不知道如何刷新/管理这些内容,这样它们就不会相互叠加。当我滚动时,随着单元格在队列中被重用,图像和文本字段被添加到彼此的顶部 假设我的项目数组名为arrayOfItems,包含我要显示的文本字段或图像列表 根据下面的答案,下面的代码有效 [tableView regist

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

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

例如,如果数组中有两个对象:
{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];

为子视图提供一个标记,如果重新使用该单元,则将其删除:

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;
}

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

cellforrowatinexpath

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

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

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

使用:

而不是:

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

我希望这能起作用。

在将对象添加到cell.contentView之前添加此行

for (id obj in [cell.contentView subviews]) {
    [obj removeFromSuperview];
}
然后在cell.contentView上添加对象,如下所示

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

那可能对你有帮助。

谢谢。这是可行的,但我不得不稍微修改我的代码的其余部分。
[cell.contentView addSubView:[self.arrayOfItems objectAtIndex:indexPath.row];