我设法更改了UISwitch
的状态并保存到NSUserDefaults
。
我的UISwitch
与主视图位于不同的视图中,当我在视图之间切换时,即使状态可能为OFF,我的UISwitch
按钮也始终显示为ON。
- (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并且当ON显示为ON时)?
答案 0 :(得分:3)
试试这个:
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];
}
希望这会有所帮助.. :)
答案 1 :(得分:1)
有点太晚了,而不是像你接受的答案那样:
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"];
上阅读更多内容
答案 2 :(得分:0)
将您的UISwitch
与IBOutlet
中的ViewController
相关联
您可以(取消)将开关设置为:
[mySwitch setOn:TRUE animated:TRUE];