UISwitch добавляется и удаляется в неправильные и случайные ячейки? - PullRequest
0 голосов
/ 22 марта 2011

Используя приведенный ниже код в методе источника данных моего табличного представления ( ... cellForRowAtIndexPath: ) Я создаю UISwitch только в определенных ячейках для представления пользовательских настроек, которое переходит в представление всплывающего окна.

Однако переключатели работают по какой-то причине, когда я прокручиваю вверх и вниз переключатели вида, которые добавляются и удаляются из случайных ячеек, которые я не указал, в них должен быть переключатель UIS.

Что я здесь не так делаю?

Это мой код:

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 Ответ

2 голосов
/ 22 марта 2011

Полагаю, вы используете dequeueReusableCellWithIdentifier:, чтобы получить ячейку перед выполнением этого кода.Ваша проблема в том, что UIS-переключатели не удаляются из ячейки, пока она не будет возвращена этим методом.

С кодом, который вы используете, должно быть простое исправление: просто установите cell.accessoryView в ноль для строк, которыенет переключателя.Или установите его равным нулю безоговорочно сразу после того, как вы получите ячейку, прежде чем вводить размещенный бит кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...