我已经设法改变我的UISwitch
的状态并保存到NSUserDefaults
。
我的UISwitch
是从主视图不同的视图,当我在视图之间翻转,我的UISwitch
按钮总是出现ON,即使状态可能是OFF。
- (IBAction)truthonoff:(id)sender {
if(_truthonoff.on) {
// lights on
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"yes" forKey:@"truthonoff"];
[defaults synchronize];
self.status.text = @"on";
}
else {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"no" forKey:@"truthonoff"];
[defaults synchronize];
self.status.text =@"off";
}
}
我是这样在第二个视图控制器中加载按钮的
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
self.text.text=[defaults objectForKey:@"truthonoff"];
我如何确保UISwitch
状态代表NSUserDefaults
中的值(即,当它是OFF时,它显示为OFF,当ON显示为ON)?
试试这个:
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[self.valueSwitch setOn:[[defaults objectForKey:@"truthonoff"] boolValue] animated:YES];
[self.valueSwitch addTarget:self action:@selector(stateSwitched:) forControlEvents:UIControlEventValueChanged];
在stateSwitched
中:
-(void)stateSwitched:(id)sender {
UISwitch *tswitch = (UISwitch *)sender;
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setObject: tswitch.isOn ? @"YES" : @"NO" forKey:@"truthonoff"];
[defaults synchronize];
}
希望这对你有帮助。:)
有点晚了,但是你没有按照你接受的答案去做:
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setObject: tswitch.isOn ? @"YES" : @"NO" forKey:@"truthonoff"];
[defaults synchronize];
正确的方式是:
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setBool:tswitch.isOn forKey:@"truthonoff"];
[defaults synchronize];
这样可以避免检查布尔值,因为NSUserDefaults
可以取boolean
的值。
也更容易检索布尔值:
bool truthonoff = [defaults boolForKey:@"truthonoff"];
阅读更多关于boolForKey
将您的UISwitch
连接到ViewController
中的IBOutlet
。
[mySwitch setOn:TRUE animated:TRUE];
方法引用