当离开视图控制器时,UISwitch不保持它的值

问题描述:

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

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

我回答了一个类似的问题,并在Github上包含一个示例项目,您可以参考:http://stackoverflow.com/a/13666090/1176156 – MaxGabriel 2013-02-25 21:55:12

+1

通常,当您发布问题时,应该包括您正在使用的代码。你发布的内容不能编译.. – 2013-02-25 22:11:34

+0

这可能是因为当你“回到视图控制器”时,你实际上会回到一个新的实例。你需要包含一些关于你如何在两个控制器之间移动的细节。 – rdelmar 2013-02-25 22:37:14

您需要以某种方式坚持设置。下面是使用NSUserDefaults一个例子:

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

读它,当你再次加载视图层次:

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

你不需要,如果做到这一点,控制器本身持续存在 - 如果你回到你最初来自的同一个控制器,交换机将保持其状态。 – rdelmar 2013-02-25 22:39:43

最可能的理由不坚持的开关状态,就是你正在创建一个新的实例(具有默认开关状态)的控制器,而不是回到您最初来自的那个。如果你使用segues,当你执行它们时,它们总是实例化新的控制器(unwind segues除外)。当你解雇他们的时候,模态控制器也会被释放,除非你在某处保留了一个强有力的引用。那么,如何让交换机保持其状态取决于你是否想回到同一个实例,以及你如何去做。