【问题标题】:UISwitch doesn't maintain its value when leaving the view controllerUISwitch 在离开视图控制器时不保持其值
【发布时间】:2023-08-20 04:54:02
【问题描述】:

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

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

【问题讨论】:

  • 我回答了一个类似的问题,并在 Github 上包含了一个示例项目,您可以参考:*.com/a/13666090/1176156
  • 通常当您发布问题时,您应该包含您正在使用的代码。您发布的内容无法编译..
  • 这可能是因为当您“回到视图控制器”时,您实际上是回到了一个新实例。您需要包含一些有关如何在 2 个控制器之间移动的详细信息。
  • 这是接受的答案*.com/questions/10782489/…

标签: ios objective-c uiviewcontroller uiswitch


【解决方案1】:

您需要以某种方式保持设置。这是一个使用NSUserDefaults的例子:

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

当你再次加载视图层次结构时阅读它:

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

【讨论】:

  • 如果控制器本身持续存在,则无需执行此操作 - 如果您返回到最初来自的同一控制器,则交换机将保持其状态。
【解决方案2】:

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

【讨论】: