【问题标题】:navController for first launch view用于首次启动视图的 navController
【发布时间】:2015-11-10 10:22:26
【问题描述】:

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

我习惯于以编程方式做所有事情,而故事板让我大吃一惊。我设置了一个布尔值来确定这是否是第一次启动应用程序。如果是这样,我想要一个视图控制器,我将其设置为导航控制器的根。如果不是第一次启动,我想为我的导航控制器设置一个不同的根视图控制器。

我点击了一个导航控制器并将其拖到我的故事板上。我只是不知道现在该怎么处理它。我有一个 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;
}

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

【问题讨论】:

标签: ios objective-c iphone uinavigationcontroller storyboard


【解决方案1】:

请务必使用

[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
}

【讨论】:

  • 我不会将窗口的根视图控制器设置为导航控制器吗?
  • 这是一个重复的问题和重复的答案。在您花时间给出答案并给予他们应有的信用之前,请为用户使用适当的 SO 礼仪
  • @soulshined 我有点困惑。这是我写的原始答案......也许我在礼仪中遗漏了一些东西。对不起,我没有意识到我做错了什么。让我知道我可以做些什么来避免将来违反条款?
  • 只需简单地将问题标记为重复并提供问题的链接或将它们指向已在 SO 上的资源。您的回答没有错,只是有很多人问过这个问题,而 OP 没有表现出任何努力来寻找这些
  • 当您将问题标记为重复时。它会自动以评论的形式通知版主或 SO 大神。仅供参考,这是每个人的职责,无论声誉 1 还是 1000。创建一个整洁的社区,更容易找到问题
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多