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

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

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

我有 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 项目并通过我的电子邮件地址发送?

【问题讨论】:

    标签: ios iphone xcode5 modalviewcontroller


    【解决方案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];
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多