UITw中的UISwitch id在视觉上没有被禁用

时间:2012-04-19 18:04:15

标签: objective-c ios uitableview uiswitch

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

我也有一系列所有的UISwitch。

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

一切正常。

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

我该如何解决?

1 个答案:

答案 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方法中使用该数组。