0

我有一个 UITableView,我所有的单元格都有一个 UISwitch 作为附件视图。

我还有一个包含所有 UISwitches 的数组。

在 viewDidAppear 方法中,我遍历我的 UISwitches 数组并禁用它们。

一切正常。

问题是当我上下移动 UITableView 时,隐藏并再次显示的 UISwitches 不会变暗。它们按预期禁用,但看起来它们已启用。

我该如何解决?

4

1 回答 1

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 cell==nil 已被注释掉,因此这些单元格永远不会被重用。显然不适合节省内存等,但如果您没有大型或奇怪的表格视图,您可能甚至不会注意到。

您可以尝试的另一件事是保留一个布尔值数组,以确定是否应检查开关,并在cellForRowAtIndexPath方法中使用该数组。

于 2012-04-19T18:14:30.407 回答