navController用于第一个启动视图

时间:2015-08-17 17:17:45

标签: ios objective-c iphone uinavigationcontroller storyboard

我目前有一个启动画面故事板,图像设置为我的加载屏幕。

我过去常常以编程方式完成所有操作,而故事板则让我有所收获。我有一个布尔设置来确定这是否是第一次启动应用程序。如果是这样,我希望有一个视图控制器,我将其设置为导航控制器的根目录。如果它不是第一次启动,我想为我的导航控制器设置一个不同的根视图控制器。

我已点击并将导航控制器拖到我的故事板上。我现在不知道该怎么做。我有一个viewController设置了一个图像,如果它是第一次启动应用程序我想成为第一个看到的图像。但是,我不确定使用故事板自动初始化的内容,因此从概念上讲,我不确定如何设置应用。

由于我必须以编程方式处理此情况,我是否需要在故事板中创建导航控制器,或者这是多余的?

我的父VC(viewController)只是一个标签覆盖在顶部的图像。使用我的appDelegate.h文件中的以下代码构建正确显示我的启动屏幕故事板,但随后淡出为黑屏。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    firstLaunch = YES;

    if (firstLaunch == YES) {

        ViewController *launchScreen = [ViewController new];

        UINavigationController * navControl = [[UINavigationController alloc]initWithRootViewController:launchScreen];

        self.window.rootViewController = navControl;

        firstLaunch = NO;
    }

    else {
//        create instance of other view controller and set as root of navigation controller
    }


    return YES;
}

关于为什么我的应用只是导航到黑屏的任何想法?

1 个答案:

答案 0 :(得分:0)

确保使用

[window makeKeyAndVisible];

我通常在我的应用程序中这样做:

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.navController = [[UINavigationController alloc]init];
self.window.rootViewController = self.mainViewController;
[self.window makeKeyAndVisible];

此外,您的代码始终会说它是用户的第一次。我建议使用NSUserDefaults:

BOOL hasLaunchedBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedBefore"];
if (!hasLaunchedBefore) {
    //All your first launch UI stuff
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedBefore"];
    [[NSUserDefaults standardUserDefaults] synchronize];
} else {
    //Not first launch
}