在应用启动时显示 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] 警告:尝试在我所要做的就是在故事板文件中创建一个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的主要内容,如果未能解决你的问题,请参考以下文章