0

我有一个 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 内。

谢谢

4

2 回答 2

3

在你的头文件中,声明一个 NSString 来保存开关的状态。让我们将其命名为theSwitchPosition

然后,在触发开关时运行的方法中,使 SwitchPosition 保持开关的状态:

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

之后,在创建 UISwitch 的方法中,根据保存数据的字符串设置开关的状态:

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

如果您的表格视图中只有一个 UISwitch,这将起作用。如果你有多个,你需要使用 NSMutableArray 来代替。

于 2014-08-12T06:02:51.340 回答
1

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

如果是这样,我猜问题是细胞正在被回收和重新创建。当您从dequeReusableCellWithIdentifier:CellIdentifier. 要解决此问题,您需要为您的特殊单元格设置一个不同的CellIdentifier.

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

于 2012-01-04T07:10:01.617 回答