在应用启动时显示ViewController

时间:2014-04-01 21:35:58

标签: ios iphone xcode5 modalviewcontroller

这是我在Stackoverflow上的第一篇文章,所以我想说" Hello"。原谅我,我的英文不好:) 我已经在Stackoverflow上阅读了很多线程来解决我的问题,但我是一个彻头彻尾的尝试者,所以我不能让我的应用程序像我想要的那样工作。

如果应用程序是第一次启动,我想呈现动画的模态视图控制器 - 如果不是这样的"介绍视图"不应该显示。

我有Xcode 5 + iOS7模拟器。我在" Main.storyboard"中有两个ViewControllers。文件。其中一个"是初始的View Controller"。

如果该应用首次启动,我找到了做某事的方法,然后将其同步到设置(在#34; 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项目并通过我的电子邮件地址发送吗?

3 个答案:

答案 0 :(得分:0)

您可以使用一些代码执行此操作,例如我提供的样本。

在使用代码之前,您应该在下面更改。

  • DefaultViewController :您的默认视图控制器类。
  • InitialViewController :您的初始视图控制器类,其实例仅显示一次。
  • InitialViewControllerIdentifier :故事板中初始视图控制器屏幕的标识符名称(或 Storyboard ID )。
  • 您应该在应用信息plist文件中取消设置 UIMainStoryboardFile键。您也可以从Xcode执行此操作:目标 - >常规标签 - >部署信息部分 - >主界面
  • - (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

    找到文档

    编辑:根据评论更新代码和说明。

    答案 1 :(得分:0)

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

    答案 2 :(得分:0)

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

    - (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];
        }
    }