问题描述
|
我有一个带有自定义单元格的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:
,我会尽力帮助您。