Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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_Xcode_Uitableview_Reuseidentifier - Fatal编程技术网

Ios UITableViewCell可重用性问题。修改一个单元格会影响其他单元格

Ios UITableViewCell可重用性问题。修改一个单元格会影响其他单元格,ios,xcode,uitableview,reuseidentifier,Ios,Xcode,Uitableview,Reuseidentifier,每当选择第3节中的单元格时。我正在更新数据源数组,因此单元格的背景颜色正在正确更改 然而,每当我向上滚动时,我就会看到背景颜色经过修改的随机单元格,因为我知道在我的cellforrowatinexpath方法中甚至没有提到它,我的tableView中的每个部分都是从一个单独的数据源数组/字典填充的 (我使用故事板处理所有UI设置) 这是我的代码(请关注第3节) 这里是我做所有数据源修改的地方 - (void)tableView:(UITableView *)tableView didSelect

每当选择第3节中的单元格时。我正在更新数据源数组,因此单元格的背景颜色正在正确更改

然而,每当我向上滚动时,我就会看到背景颜色经过修改的随机单元格,因为我知道在我的
cellforrowatinexpath
方法中甚至没有提到它,我的
tableView
中的每个部分都是从一个单独的数据源
数组/字典
填充的

(我使用故事板处理所有UI设置)

这是我的代码(请关注第3节)

这里是我做所有数据源修改的地方

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if (indexPath.section == 0 && indexPath.row == 2) {

    // Do Stuff

} else if (indexPath.section == 3) { //---- Problems here 

    ECTextFieldTableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    cell.backgroundColor = [UIColor redColor];

    UserMeta *metaObj = self.interestDataSource[indexPath.row];
    [self.user.INTEREST addObject:metaObj];

} 

}

正如您所写的,单元被重用。第3节中显示的单元格可以在第0节中重用

因此,您必须确保所有参数都设置为定义状态


这意味着,如果在第3节中将
userInteractionEnabled
设置为
NO
,并且根据条件将背景颜色设置为红色,则必须将
userInteractionEnabled
设置为
YES
并且在所有其他部分将颜色设置为默认颜色。此外,如果条件为false,则必须在第3节中将颜色设置为默认颜色。

如您所述,单元格将被重新使用。第3节中显示的单元格可以在第0节中重用

因此,您必须确保所有参数都设置为定义状态


这意味着,如果在第3节中将
userInteractionEnabled
设置为
NO
,并且根据条件将背景颜色设置为红色,则必须将
userInteractionEnabled
设置为
YES
并且在所有其他部分将颜色设置为默认颜色。此外,如果条件为false,则必须将颜色设置为第3节中的默认颜色。

因为滚动时会重复使用表格单元格,所以不能对其初始状态进行任何假设。在
cellforrowatinexpath
中,您需要在所有条件下设置背景色,而不仅仅是在有限的条件下。例如,您可以在单元格出列后将背景色设置为白色,然后在
if
语句的一个分支中将其设置为红色。由于滚动时会重复使用表格单元格,因此无法对其初始状态进行任何假设。在
cellforrowatinexpath
中,您需要在所有条件下设置背景色,而不仅仅是在有限的条件下。例如,您可以在单元格出列后将背景色设置为白色,然后在
if
语句的一个分支中将其设置为红色。在开始为每个
indexPath
自定义单元格之前,我向
cellforrowatinexpath
添加了一些“默认单元格”代码,这就成功了!以下是我所做的修改:
cell.userInteractionEnabled=YES;cell.cellTextField.placeholder=@“”;cell.cellTextField.text=@”;cell.cellAccessoryView.image=nil好的观点。在开始为每个
indexPath
自定义单元格之前,我向
cellforrowatinexpath
添加了一些“默认单元格”代码,这就成功了!以下是我所做的修改:
cell.userInteractionEnabled=YES;cell.cellTextField.placeholder=@“”;cell.cellTextField.text=@”;cell.cellAccessoryView.image=nil
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if (indexPath.section == 0 && indexPath.row == 2) {

    // Do Stuff

} else if (indexPath.section == 3) { //---- Problems here 

    ECTextFieldTableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    cell.backgroundColor = [UIColor redColor];

    UserMeta *metaObj = self.interestDataSource[indexPath.row];
    [self.user.INTEREST addObject:metaObj];

} 

}