UITableView中的UISwitch在滚动时重置为原始值

时间:2011-05-25 02:29:59

标签: ios uitableview uiswitch

我有一个带有自定义单元格的UITableview。其中一个customcell中有一个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;


}}

我在IB中设置了UISwitch。它位于自定义UITableviewcell中。

由于

2 个答案:

答案 0 :(得分:3)

在头文件中,声明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 :(得分:1)

我假设您说如果向下滚动(切换单元格在屏幕上滚动),然后向上滚动(切换单元格在屏幕上滚动),则不会保留切换状态。这是对的吗?

如果是这样,我猜测问题是该单元正在被回收并重新创建。当您从dequeReusableCellWithIdentifier:CellIdentifier获取单元格时会发生这种情况。要解决此问题,您需要为特殊单元格提供不同的CellIdentifier

如果仍然不清楚,请粘贴tableView:cellForRowAtIndexPath:的代码,我会尽力为您提供帮助。