分段控制的保存和加载状态

Posted

技术标签:

【中文标题】分段控制的保存和加载状态【英文标题】:Save and load state of Segmented Controler 【发布时间】:2013-09-30 12:42:51 【问题描述】:

我希望能够让用户选择其中一个片段,当他们加载该视图控制器备份时,他们选择的那个将被选中。默认情况下,我选择了“黑色”,但如果他们选择“白色”然后关闭他们的应用程序,请重新打开它“然后将选择白色。

这是我为第一个情节提要的分段控制器的代码:

- (IBAction)ChangeLook:(id)sender 

    if (backgroundColour.selectedSegmentIndex == 0) 

        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard4inch-White"
                                                                 bundle: nil];
        MainMenuView_4inch_White *second = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuView_4inch-White"];
        [self presentViewController:second animated:NO completion:nil];
        NSLog(@"White Selected");

    

    if (backgroundColour.selectedSegmentIndex == 1) 

        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard4inch"
                                                                 bundle: nil];
        MainMenuView_4inch *second = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuView_4inch"];
        [self presentViewController:second animated:NO completion:nil];
        NSLog(@"Black Selected");

    

这是我为第二个情节提要的分段控制器的代码:

- (IBAction)ChangeLook:(id)sender 

    if (backgroundColour.selectedSegmentIndex == 0) 

        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard4inch-White"
                                                                 bundle: nil];
        MainMenuView_4inch_White *second = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuView_4inch-White"];
        [self presentViewController:second animated:NO completion:nil];
        NSLog(@"White Selected");

    

    if (backgroundColour.selectedSegmentIndex == 1) 

        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard4inch"
                                                                 bundle: nil];
        MainMenuView_4inch *second = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuView_4inch"];
        [self presentViewController:second animated:NO completion:nil];
        NSLog(@"Black Selected");

     

我也可能有一件可能有帮助的:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:[NSNumber numberWithInt:[backgroundColour selectedSegmentIndex]] forKey:@"whiteBackground"];

我知道这不会保存或加载它,但它可能会帮助有人帮助我解决问题。 所以我需要保存为两个视图控制器选择的选项。

* 编辑 *

我有这个游戏,我希望它与用户设备的颜色相匹配,或者只是为了提供更多选择。所以我有两个故事板,一个是黑色背景,一个是白色背景。在两个故事板中,在主菜单中,我有一个分段控件,可以选择更改颜色。假设我想要白色背景,然后关闭应用程序,然后再打开它,我希望他们选择的选项出现(使用分段控件)。希望这可以帮助。谢谢!

【问题讨论】:

试试,[默认同步];设置对象后。 我把它放在我的代码中,但它仍然没有保存或加载,我仍然需要编写代码来做到这一点。我没有代码所以这就是我来这里的原因:) 你是通过这段代码获取的吗,[[NSUserDefaults standardUserDefaults] integerForKey:@"whiteBackground"] 你能把这些 cmets 放到一个答案中吗?我想这可能是我需要的 【参考方案1】:

获取值,

NSInteger *segmentIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"whiteBackground"];
    if(segmentIndex  == 0)
    
        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard4inch-White"
                                                                 bundle: nil];
        MainMenuView_4inch_White *second = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuView_4inch-White"];
        [self presentViewController:second animated:NO completion:nil];
        NSLog(@"White Selected");
    

存储价值,

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[NSNumber numberWithInt:[backgroundColour selectedSegmentIndex]] forKey:@"whiteBackground"];

【讨论】:

是否可以解释所有这些或何时放置?运气不好。【参考方案2】:

我不明白你在做什么... 看起来你有两个不同的故事板或类似的东西。但是您只想选择 UISegmentedControl 的第二段?

然后只需要一个故事板,一个视图控制器。您与您的 UISegmentedControl 的插座链接,然后设置 mySegmentedControl.selectedSegmentIndex = 0 // Or 1...?

看起来你试图做一些非常简单的事情,但却使用了大量的东西。

编辑后编辑:

那就这样做吧,

- (IBAction)ChangeLook:(id)sender 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([defaults valueForKey:@"whiteBackground"] == 1) 
    ...// Use white storyboard
    
    else 
    ...// Use normal storyboard
    

【讨论】:

收到此错误:在 [defaults valueForKey:@"whiteBackground"] == 1) 上使用 ARC 不允许将“int”隐式转换为“id” 对不起,我的错:if ([[defaults valueForKey:@"whiteBackground"] intValue] == 1)... 好的,没有错误,让我运行它,我会告诉你它是怎么回事。 代码都很好,只是当应用程序加载时,它首先加载黑色情节提要,然后当我点击白色部分时它会加载它但是当我双击主页按钮然后关闭应用程序时,加载它备份,它会再次加载黑色背景,而不是白色。 应用代理?为什么在那里,我将如何实施?只是有点困惑需要去哪里

以上是关于分段控制的保存和加载状态的主要内容,如果未能解决你的问题,请参考以下文章

无法加载视图状态。正在加载视图状态的控制树必须与用于保存视图状态的控制树匹配

将QCheckBox的状态保存在文件中,程序重启时加载状态

使用运行时生成的控件保存控件窗口并重新加载为以前的状态

切换按钮的保存和加载状态

保存和加载布尔状态

iPhone 如何保存视图状态