离开视图控制器时,UISwitch不会保持其值

时间:2013-02-25 21:41:49

标签: ios objective-c uiviewcontroller uiswitch

如果我要将UISwitch控制器切换为“关闭”并离开视图控制器并返回到视图控制器,它将显示UISwitch“打开”(默认值)而不是“关”。从/向视图控制器切换时如何保存UISwitch控制器的值?

- (void)controlsEnabled:(BOOL)enabled
{
    self.onandoffSwitch.enabled = enabled;   
    if (enabled)
    {
        NSLog(@"ON");    
    }
    else
    {
        NSLog(@"OFF");     
    }
}

2 个答案:

答案 0 :(得分:5)

您需要以某种方式保留设置。以下是使用NSUserDefaults的示例:

[[NSUserDefaults standardUserDefaults] setBool:yourSwitch.on forKey:@"switchValue"];
[[NSUserDefaults standardUserDefaults] synchronize];

再次加载视图层次结构时读取它:

NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
BOOL state = [[NSUserDefaults standardUserDefaults] boolForKey:@"switchValue"];

答案 1 :(得分:0)

交换机状态不存在的最可能原因是,您正在创建控制器的新实例(使用默认交换机状态),而不是返回到最初来自的实例。如果你正在使用segue,它们总是在你执行它们时实例化新的控制器(展开segues除外)。当你解雇它们时,模态呈现的控制器也会被解除分配,除非你在某处保留了对它们的强烈引用。那么,如何让交换机保持其状态取决于你是否想要回到同一个实例,以及你如何去做。