我有一个带有自定义单元格的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中。
由于
答案 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:
的代码,我会尽力为您提供帮助。