在应用启动时显示 ViewController

Posted

技术标签:

【中文标题】在应用启动时显示 ViewController【英文标题】:Display ViewController on app launch 【发布时间】:2014-04-01 21:35:58 【问题描述】:

这是我在 *** 上的第一篇文章,所以我想说“你好”。原谅我英语不好:) 我在 *** 上阅读了许多主题来解决我的问题,但我是一个完全的初学者,所以我无法让我的应用程序按照我想要的方式运行。

如果应用程序首次启动,我想呈现动画的模态视图控制器 - 如果不是,则不应显示“介绍视图”。

我有 Xcode 5 + ios7 模拟器。我在“Main.storyboard”文件中有两个 ViewController。其中之一“是初始视图控制器”。

如果第一次启动应用程序,我已经找到了做某事的方法,然后将其同步到设置(在“AppDelegate.m”文件中):

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
        // Override point for customization after application launch.
        UIColor *tintColor = [UIColor colorWithRed:137/255.0f green:116/255.0f blue:62/255.0f alpha:1.0];
        [[UIButton appearance] setTintColor:tintColor];
        [[UISegmentedControl appearance] setTintColor:tintColor];
        [[UIAlertView appearance]setTintColor:tintColor];

        BOOL ranBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"ranBefore"];
        if (!ranBefore) 

            //////DISPLAY SECOND (not "is initial view controller") VIEW CONTROLLER HERE\\\\\\

            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ranBefore"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        

        return YES;
    

我该怎么做?就像我说的那样,即使是其他帖子的复制粘贴也无法解决我的问题(我是初学者:P)。能否请您为我制作一个有效的 Xcode 项目并通过我的电子邮件地址发送?

【问题讨论】:

【参考方案1】:

您可以进入情节提要并选择要在应用启动时首先显示的视图控制器。选择所需的视图控制器后,单击属性检查器并向下滚动以找到“Is Initial View Controller”选项并单击它以在启动应用程序时显示该选项。另一种选择是进入情节提要,会有一个指向视图的箭头。它不会连接到任何东西。它将指向一个视图。您可以拖动该箭头并将其放在要首先加载的视图旁边。

【讨论】:

【参考方案2】:

您可以使用我提供的示例代码来完成此操作。

您应该在使用代码之前更改以下内容。

DefaultViewController:您的默认视图控制器类。 InitialViewController:您的初始视图控制器类,其实例只会显示一次。 InitialViewControllerIdentifier:故事板中初始视图控制器屏幕的标识符名称(或故事板 ID)。 您应该取消设置 UIMainStoryboardFile 键入您的应用程序信息 plist 文件。您也可以从 Xcode 中执行此操作:Target -> General Tab -> Deployment Info Section -> Main Interface
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // Override point for customization after application launch.
    UIColor *tintColor = [UIColor colorWithRed:137/255.0f green:116/255.0f blue:62/255.0f alpha:1.0];
    [[UIButton appearance] setTintColor:tintColor];
    [[UISegmentedControl appearance] setTintColor:tintColor];
    [[UIAlertView appearance]setTintColor:tintColor];

    UIStoryboard * myStoryboard = [UIStoryboard storyboardWithName:@"StoryboardName" bundle:nil];

    BOOL ranBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"ranBefore"];
    if (!ranBefore)
    
        InitialViewController * initialViewController = [myStoryboard instantiateViewControllerWithIdentifier:@"InitialViewControllerIdentifier"];
        [self.window setRootViewController:initialViewController];

        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ranBefore"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    
    else
    
        DefaultViewController * defaultViewController = [myStoryboard instantiateInitialViewController];
        [self.window setRootViewController:defaultViewController];
    

    return YES;

P.S:您也可以使用UIStoryboardSegue 进行演示工作。您可以在以下位置找到文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UIStoryboardSegue_Class/Reference/Reference.html

编辑:根据 cmets 更新代码和解释。

【讨论】:

2014-04-02 19:00:07.140 SmieciUI2[661:60b] Interface Builder 文件中的未知类 Main。 2014-04-02 19:00:07.143 SmieciUI2[661:60b] 警告:尝试在 上显示 ,其视图不在窗口层次结构中!那个控制台输入,我还是不能让它工作? Storyboard 文件中主视图控制器的 Identity Inspector(左起第三个选项卡)中的类字段是什么?【参考方案3】:

我所要做的就是在故事板文件中创建一个segue(从一个视图到另一个视图),例如给它一个标识符“goToTutorial”,然后在“MainViewController.m”文件中(这是类初始视图控制器)我必须实现 viewDidAppear 方法(当我尝试在“viewDidLoad”中执行此操作时遇到错误:“警告:尝试呈现不在窗口层次结构中的视图! "):

- (void)viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];

并执行 segue(在 viewDidAppear 之外):

[self performSegueWithIdentifier:@"goToTutorial" sender:self];

所以它看起来像这样:

- (void)viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];

    BOOL ranBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"ranBefore"];
    if (!ranBefore) 
        [self performSegueWithIdentifier:@"tutorialView" sender:self];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ranBefore"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    

【讨论】:

以上是关于在应用启动时显示 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

在应用启动时显示介绍视频

如何在应用程序启动时显示锁定屏幕?

如何在启动时显示 KivyMD 数据表?

应用程序第二次启动时显示第二个 ViewController

当应用程序进入后台android时显示启动画面

在应用启动时显示 ViewController