我有一个UITableView,我的所有单元都有一个UISwitch作为附件。
我也有一系列所有的UISwitch。
在viewDidAppear方法中,我遍历我的UISwitches数组并禁用它们。
一切正常。
问题是当我上下移动UITableView时,隐藏并再次显示的UISwitch不会变暗。它们按预期被禁用,但看起来它们已启用。
我该如何解决?
答案 0 :(得分:2)
问题是您的单元格正在被重用,因此单元格开关正在被重用。一种解决方案是强制您的细胞不被重复使用,即:
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单元格== nil被注释掉,因此单元格永远不会被重用。显然不是很好的保存记忆等等,但如果你没有大型或奇怪的桌面视图,你可能甚至都不会注意到。
您可以尝试的另一件事是保留一个布尔值数组,以确定是否应该检查开关,并在cellForRowAtIndexPath
方法中使用该数组。