UISwitch в UITableView сбрасывается до исходного значения при прокрутке - PullRequest
0 голосов
/ 25 мая 2011

У меня есть UITableview с пользовательскими ячейками в нем.В одной из пользовательских ячеек есть UISWITCH.При прокрутке табличного представления состояние переключателя сбрасывается, даже если я установил его в положение ON.Как я могу сохранить состояние переключателя во время прокрутки.Любая помощь приветствуется.

-(IBAction)sameDriver:(id)sender{

if ([sender isOn]){

    NSLog(@"%@",(otherdriver.drive ? @"YES" : @"NO"));

    NSUserDefaults* defaults  = [NSUserDefaults standardUserDefaults];
    [defaults setBool: YES forKey: K_SWITCH_KEY];
    [defaults synchronize];

    Switchon = [defaults boolForKey: K_SWITCH_KEY];


if(Switchon){

    otherdriver.dfname.text = fname;
    otherdriver.dlname.text = lname;
    otherdriver.demail.text = email;
    otherdriver.dpnum.text = phone;

    }
}
else if(![sender isOn]){

    NSUserDefaults* defaults  = [NSUserDefaults standardUserDefaults];
    [defaults setBool: NO forKey: K_SWITCH_KEY];
    [defaults synchronize];

   NSLog(@"%@",(otherdriver.drive ? @"YES" : @"NO"));

    Switchon = [defaults boolForKey: K_SWITCH_KEY];

    otherdriver.dfname.text = drfname;
    otherdriver.dlname.text = drlname;
    otherdriver.demail.text = dremail;
    otherdriver.dpnum.text = drphone;


}}

Я устанавливаю переключатель UIS в IB.Он находится внутри пользовательского UITableviewcell.

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 августа 2014

В вашем заголовочном файле объявите строку NSString для хранения состояния коммутатора.Давайте назовем его theSwitchPosition .

Затем в вашем методе, который запускается при срабатывании переключателя, заставьте theSwitchPosition удерживать состояние переключателя:

theSwitchPosition = [NSString stringWithFormat:@"%@", switchControl.on ? @"ON" : @"OFF"];

После этогов методе, в котором вы создаете UISwitch, установите статус коммутатора на основе строки, содержащей данные:

if ([theSwitchPosition isEqualToString:@"ON"]) {
    mySwitch.on = YES;
} else {
    mySwitch.on = NO;
}

Это будет работать, если у вас есть только один UISwitch в табличном представлении.Если у вас их несколько, вам нужно использовать NSMutableArray.

1 голос
/ 04 января 2012

Я предполагаю, что вы говорите, что если вы прокручиваете вниз (ячейка переключателя прокручивается за пределы экрана), а затем вы прокручиваете назад вверх (ячейка переключателя снова прокручивается на экране), то состояние переключателя не сохраняется. Это правильно?

Если это так, я предполагаю, что проблема в том, что клетка перерабатывается и воссоздается. Это происходит, когда вы получаете свою ячейку от dequeReusableCellWithIdentifier:CellIdentifier. Чтобы это исправить, вам нужно дать вашей специальной ячейке другой CellIdentifier.

Если это все еще неясно, пожалуйста, вставьте свой код для tableView:cellForRowAtIndexPath:, и я постараюсь помочь вам в дальнейшем.

...