我有一个 UITableView,我所有的单元格都有一个 UISwitch 作为附件视图。
我还有一个包含所有 UISwitches 的数组。
在 viewDidAppear 方法中,我遍历我的 UISwitches 数组并禁用它们。
一切正常。
问题是当我上下移动 UITableView 时,隐藏并再次显示的 UISwitches 不会变暗。它们按预期禁用,但看起来它们已启用。
我该如何解决?
我有一个 UITableView,我所有的单元格都有一个 UISwitch 作为附件视图。
我还有一个包含所有 UISwitches 的数组。
在 viewDidAppear 方法中,我遍历我的 UISwitches 数组并禁用它们。
一切正常。
问题是当我上下移动 UITableView 时,隐藏并再次显示的 UISwitches 不会变暗。它们按预期禁用,但看起来它们已启用。
我该如何解决?
问题是您的单元正在被重用,因此单元开关正在被重用。一种解决方案是强制您的单元格不被重复使用,即:
MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:nil options:nil];
for(id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (MyCustomCell *)currentObject;
break;
}
}
//}
请注意 if cell==nil 已被注释掉,因此这些单元格永远不会被重用。显然不适合节省内存等,但如果您没有大型或奇怪的表格视图,您可能甚至不会注意到。
您可以尝试的另一件事是保留一个布尔值数组,以确定是否应检查开关,并在cellForRowAtIndexPath
方法中使用该数组。