【问题标题】:Change MainView of app based on Setting.bundle toggle switch state?根据 Setting.bundle 切换开关状态更改应用程序的 MainView?
【发布时间】:2012-05-29 04:22:54
【问题描述】:

我正在尝试根据 setting.bundle 中的切换开关状态更改我的应用程序的 mainView。我想设置的默认设置为 NO,我已经设置了。但似乎我遗漏了一些东西,我似乎可以让视图随我的代码更改的唯一方法是更改​​默认值。我在 applicationDidFinishLaunchingWithOptions 的 delegate.m 文件中执行此操作。请任何帮助都会很棒!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

//Registers the defaults.
NSUserDefaults *metricDefaults = [NSUserDefaults standardUserDefaults];
[metricDefaults registerDefaults:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:@"metric_preferences"]];
BOOL metricDisabled = [metricDefaults boolForKey:@"metric_preference"];
[metricDefaults synchronize];

//Change MainView based on Metric setting.
if (metricDisabled) {

    //Standard View.
    MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
    self.mainViewController = aController;
    [aController release];

    mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
    [window addSubview:[mainViewController view]];
    [window makeKeyAndVisible];

    return YES;

} else {

    //Metric View.
    MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainViewMetric" bundle:nil];
    self.mainViewController = aController;
    [aController release];

    mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
    [window addSubview:[mainViewController view]];
    [window makeKeyAndVisible];

    return YES;
}

}

【问题讨论】:

  • 如果要检查拨动开关的状态,为什么要设置[metricDefaults setBool:NO forKey:@"metric_preference"];?摆脱它并再次运行。
  • 也试过了,如果我去掉那条线,它只会加载 MainView,无论切换开关的状态如何,它都不会加载 MainViewMetric。

标签: iphone ios xcode settings.bundle


【解决方案1】:

您需要使用 registerDefaults: 将此键的默认值设置为 NO。如果用户从未设置过该值,则这会为用户默认值提供一个值,但不会影响用户更改后它的值。你这样做的方式,总是将用户默认值设置为 NO。

编辑后:

这就是你这样做的方式:

NSUserDefaults *metricDefaults = [NSUserDefaults standardUserDefaults];
    [metricDefaults registerDefaults:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:@"metric_preferences"]];
    BOOL metricDisabled = [metricDefaults boolForKey:@"metric_preference"];
    [metricDefaults synchronize];

【讨论】:

  • 如果我将其默认设置为 YES 或 NO,则在运行应用程序时,切换开关始终处于打开状态,我希望默认设置为 NO,而当 NO 时,我希望显示 MainView。当它设置为 YES 时,我希望 MainViewMetric 显示。
  • 我不确定我是否理解您的问题。您是否希望该用户的值在应用程序首次运行时默认为 NO,然后根据用户在后续运行中将其更改为 YES 或 NO?
  • 抱歉,我希望 settings.bundle 中切换开关的默认值默认为 NO。然后,如果用户决定他们想要 Metric,他们可以在设置中将其设置为 YES,然后当他们重新启动应用程序时,它会加载 MainViewMetric,而不是 MainView(这是标准)。希望这能清除我所需要的。 (是的,你说的听起来像是我想做的。)
  • 是的。那么您是否尝试过使用 registerDefaults:?如果不这样做(无论如何我都知道),就无法做你想做的事。请参阅我编辑的答案以了解如何执行此操作。
  • 我正在研究如何注册默认值,抱歉我还是个新手。感谢您提供示例,但默认情况下设置中的切换开关仍显示为打开,并且不会更改视图仍然天气我将其更改为打开或关闭。 Xcode 4 中有什么东西可以“告诉”我添加了 settings.bundle 的应用程序吗?我在某处读到过,但说明是针对旧版本的 xcode。
猜你喜欢
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多