保存多个 UISwitch 状态不同的 Views

Posted

技术标签:

【中文标题】保存多个 UISwitch 状态不同的 Views【英文标题】:Save multiple UISwitch states different Views 【发布时间】:2013-01-17 18:49:27 【问题描述】:

所以我有一个包含六个视图的应用程序,总共包含 36 个开关。当用户轻弹它们时,是否有一种简单的方法可以保存所有状态?我听说过将它们全部放在标签或其他东西下,但不知道如何做到这一点。我希望它们自动保存和加载。

最好的问候, Øyvind Larsen Runestad

【问题讨论】:

你用过界面生成器吗? 您可以使用 Interface Builder 中的附加属性部分为每个开关设置一个 'keyPath' 属性...然后使用它从您的默认值或应用程序控制器等自动设置/获取属性。只需一个方向的想法。 【参考方案1】:

创建一个数组来存储开关的所有状态值。

将该数组保存为用户默认值。

在应用启动时读取该文件并初始化该数组并设置开关按钮的状态。

【讨论】:

【参考方案2】:

我修好了!在一位朋友的非常感谢的帮助下。我给每个开关一个唯一的标签,并在我的 .h 中将它们定义为:

#define Switchinfour0 100
#define Switchinfour1 101
#define Switchinfour2 102
#define Switchinfour3 103
#define Switchinfour4 104
#define Switchinfour5 105
#define Switchinfour6 106
#define Switchinfour7 107
#define Switchinfour8 108
#define Switchinfour9 109
#define Switchinfour10 110
#define Switchinfour11 111
#define Switchinfour12 112
#define Switchinfour13 113
#define Switchinfour14 114
#define Switchinfour15 115
#define Switchinfour16 116
#define Switchinfour17 117
#define Switchinfour18 118
#define Switchinfour19 119
#define Switchinfour20 120
#define Switchinfour21 121
#define Switchinfour22 122
#define Switchinfour23 123
#define Switchinfour24 124
#define Switchinfour25 125
#define Switchinfour26 126
#define Switchinfour27 127
#define Switchinfour28 128
#define Switchinfour29 129
#define Switchinfour30 130
#define Switchinfour31 131
#define Switchinfour32 132
#define Switchinfour33 133
#define Switchinfour34 134
#define Switchinfour35 135
#define Switchinfour36 136

然后,我在我的 (IBAction)save:(id)sender 下添加了这个;

-(IBAction)save:(id)sender

    //Switch save
    NSUserDefaults* def = [NSUserDefaults standardUserDefaults];
    for (int i = 100; i < 136; i++)
    
        UISwitch* sw = (UISwitch*)[self.view viewWithTag:i];
        [def setBool:sw.on forKey:[NSString stringWithFormat:@"Switch%d", i]];
    
    [def synchronize];

然后,在 viewDidLoad 的正上方我添加了这个:

-(void)switchChanged:(id)switchCtl

    UISwitch* sw = (UISwitch*)switchCtl;
    NSUserDefaults* def = [NSUserDefaults standardUserDefaults];
    [def setBool:sw.on forKey:[NSString stringWithFormat:@"Switch%d", sw.tag]];
    [def synchronize];

最后,在我的超级 viewDidLoad 中,我简单地添加了这个:

- (void)viewDidLoad


    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    NSUserDefaults* def = [NSUserDefaults standardUserDefaults];
    for (int i = 100; i < 162; i++)
    
            UISwitch* sw = (UISwitch*)[self.view viewWithTag:i];
            [sw setOn:[def boolForKey:[NSString stringWithFormat:@"Switch%d", i]]];

        [sw addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
    

我希望这可以帮助任何其他遇到这个特殊问题的人。

【讨论】:

以上是关于保存多个 UISwitch 状态不同的 Views的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift:UISwitch 切换回初始状态

在 TableViewCell 中保持 UISwitch 的状态:Swift

如何以编程方式切换uiswitch按钮

UITableView 多个部分,带有 GUI 元素 UIButton、UISwitch 等

如何保留 UISwitch 状态

使用 UISwitch 切换 iOS 7 状态栏