繁体   English   中英

目标C首次使用时更改根视图

[英]Objective C Change the root view in first time use

如果这是他们的用户第一次使用我的应用程序,我希望它通过帮助向导。 我的计划是查找特定密钥的用户默认值。 我的问题是在iPhone应用程序中重新路由初始视图的最佳方法是什么? 它在应用程序委托中发生吗? 我必须在第一个视图控制器中进行重新路由吗? 我应该在初始视图的导航控制器中调用setRootView吗? 是在情节提要中完成的吗?

我很困惑,想知道是否有一个好的方法?

我使用IOS 5

非常感谢,罗斯

在首次启动时使用userdefaults键时,最好覆盖AppDelegate中的initialize函数。 这将确保用户默认密钥被初始化为正确的值。 例如,在我的一个应用程序中,我想查看它是否是首次启动,因为我想向用户显示一个欢迎视图控制器。 我使用AppDelegate.m文件中的以下功能进行了设置。

+ (void)initialize
{
    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"showWelcome"])  {

        NSString  *mainBundlePath = [[NSBundle mainBundle] bundlePath];
        NSString  *settingsPropertyListPath = [mainBundlePath
                                               stringByAppendingPathComponent:@"Settings.bundle/Root.plist"];

        NSDictionary *settingsPropertyList = [NSDictionary 
                                              dictionaryWithContentsOfFile:settingsPropertyListPath];

        NSMutableArray      *preferenceArray = [settingsPropertyList objectForKey:@"PreferenceSpecifiers"];
        NSMutableDictionary *registerableDictionary = [NSMutableDictionary dictionary];

        for (int i = 0; i < [preferenceArray count]; i++)  { 
            NSString  *key = [[preferenceArray objectAtIndex:i] objectForKey:@"Key"];

            if (key)  {
                id  value = [[preferenceArray objectAtIndex:i] objectForKey:@"DefaultValue"];
                [registerableDictionary setObject:value forKey:key];
            }
        }

        [[NSUserDefaults standardUserDefaults] registerDefaults:registerableDictionary]; 
        [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
}

– application:didFinishLaunchingWithOptions:我添加了一个视图控制器作为根视图控制器。 我总是喜欢包含一个坚实的“ Root View Controller”来进行任何类型的启动视图切换。 在UIWindow子视图级别执行此操作可能会出现问题。 在RootViewController的– viewDidLoad中,我检查用户默认密钥。

    if ([[NSUserDefaults standardUserDefaults]valueForKey:@"showWelcome"] == [NSNumber numberWithBool:YES]) {
        [self pushViewController:[[WelcomeViewController alloc]init] animated:NO];
    } else {
        [self pushViewController:[[OtherViewController alloc]init] animated:NO];
    }

所有这些都与settings.bundle中的Bool YES / NO开关绑定在一起,允许用户根据需要再次看到WelcomeController。

设置捆绑

我使用prefs来管理该应用程序是否已预先配置(当然,默认设置为“否”),以及是否未显示全屏模式对话框,以指导用户进行配置。

[tabBarController presentModalViewController:configurationController animated:YES];

这也主要是从应用程序委托完成的,但是如果用户提前中止配置过程等,则可以在其他地方调用它,并且效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM