微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决滚动时,UITableView中的UISwitch重置为原始值

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


}}
我在IB中设置UISwitch。它在自定义UITableviewcell中。 谢谢     

解决方法

在头文件中,声明一个NSString来保存开关的状态。 让我们将其命名为SwitchPosition。 然后,在触发开关时运行的方法中,使SwitchPosition保持开关的状态:
theSwitchPosition = [NSString stringWithFormat:@\"%@\",switchControl.on ? @\"ON\" : @\"OFF\"];
之后,在创建UISwitch的方法中,根据保存数据的字符串设置交换机的状态:
if ([theSwitchPosition isEqualToString:@\"ON\"]) {
    mySwitch.on = YES;
} else {
    mySwitch.on = NO;
}
如果您在表视图中只有一个UISwitch,这将起作用。如果有多个,则需要改用NSMutableArray。     ,我假设您是说,如果您向下滚动(开关单元滚动离开屏幕),然后向上滚动(开关单元滚动回到屏幕),那么开关的状态将不会保留。它是否正确? 如果是这样,我想问题是该单元正在回收和重新创建。当您从
dequeReusableCellWithIdentifier:CellIdentifier
获得单元格时,就会发生这种情况。要解决此问题,您需要给特殊单元格一个不同的
CellIdentifier
。 如果仍然不清楚,请粘贴您的代码
tableView:cellForRowAtIndexPath:
,我会尽力帮助您。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。