UISwitch被添加到错误的随机单元格中?

时间:2011-03-22 01:56:18

标签: ios ios4 ipad

在我的表格视图数据源方法( ... cellForRowAtIndexPath:)中使用下面的代码我只在特定单元格中为进入弹出视图的用户设置视图创建UISwitch。

交换机正在工作但是由于某种原因,当我向上和向下滚动视图时,交换机正在添加并从我未指定的随机单元中删除,其中应包含UISwitch。

我在这里做错了什么?

这是我的一些代码:

if (section == 0) {

    if (row == 0) {
        cell.textLabel.text = @"Units";
    }
    if (row == 1) {
        cell.textLabel.text = @"Prefered System";
    }
    if (row == 2) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.text = @"Lock System";

        UISwitch *switch1 = [[UISwitch alloc] initWithFrame:switchFrame];
        if ([defaults boolForKey:kLockSystem]) {
            [switch1 setOn:YES animated:NO];
        }
        else {
            [switch1 setOn:NO animated:NO];
        }

        [switch1 addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged];
        switch1.tag = 1;
        cell.accessoryView = switch1;
        [switch1 release];
    }
    if (row == 3) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.text = @"Reset On Exit";

        UISwitch *switch2 = [[UISwitch alloc] initWithFrame:switchFrame];
        if ([defaults boolForKey:kResetOnExit]) {
            [switch2 setOn:YES animated:NO];
        }
        else {
            [switch2 setOn:NO animated:NO];
        }

        [switch2 addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged];
        switch2.tag = 2;
        cell.accessoryView = switch2;
        [switch2 release];
    }
}

1 个答案:

答案 0 :(得分:2)

我猜你在执行该代码之前使用dequeueReusableCellWithIdentifier:来获取一个单元格。您的问题是UISwitch在被该方法返回之前未从单元格中删除。

使用您正在使用的代码,应该有一个简单的修复:对于没有开关的行,只需将cell.accessoryView设置为nil即可。或者在输入单元格之后无条件地将其设置为nil,然后再输入已发布的代码。