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