更改首次启动的初始视图控制器

Posted

技术标签:

【中文标题】更改首次启动的初始视图控制器【英文标题】:Change Initial View Controller for First Launch 【发布时间】:2014-11-04 20:57:57 【问题描述】:

我知道有人问过这个问题,但这些方法对我不起作用。我有一个包含教程的视图控制器,我只想在第一次打开应用程序时将其显示为初始视图。之后,主菜单将始终是初始视图。我的教程屏幕的故事板 ID 是“教程”。我有以下代码来检测首次启动,但我不知道如何使教程出现:

  - (void)viewDidLoad
 
if ([[NSUserDefaults standardUserDefaults]boolForKey: @"FirstLaunch"])

else

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

【问题讨论】:

【参考方案1】:

您可以通过两种方式更改初始控制器:

    在 Interface Builder 中选中“Is Initial VC”复选框或 在 -application:didFinishLaunchingWithOptions: 方法中配置它

使用 Application Delegate 更改初始视图控制器

在 -application:didFinishLaunchingWithOptions: 在您的应用程序委托 (AppDelegate.m) 中添加 if/else 以检查教程的必要性:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    // Override point for customization after application launch.
    if (![[NSUserDefaults standardUserDefaults] boolForKey: @"FirstLaunch"])
    
       [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstLaunch"];
       [[NSUserDefaults standardUserDefaults] synchronize];
       /*** load vc ***/
    
    return YES;
 

要设置初始控制器,您必须初始化窗口属性,创建 vc 并将其设置为 root:

// 1. Initialize window
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
// 2. Get storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
// 3. Create vc
TutorialViewController *tutorialViewController = [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([TutorialViewController class])];
// 4. Set as root
self.window.rootViewController = tutorialViewController;
// 5. Call to show views
[self.window makeKeyAndVisible];

希望对您有所帮助!

【讨论】:

我收到错误消息“在'App Delegate'类型的对象上找不到属性'故事板'”有什么想法吗?非常感谢您的帮助! 感谢您的评论!编辑了我的答案。您可以在主要目标信息屏幕上找到您的故事板名称。通常称为“Main”或“Main_iphone” 谢谢!但是现在我收到一条错误消息,说“使用未声明的标识符'navigator VC'”我该如何解决这个问题?非常感谢您的帮助 编辑了我的答案。我通常在导航控制器中嵌入视图控制器。忘记删除导航控制器实体。现在代码是正确的。 感谢您的帮助。但现在我收到错误消息“未知接收器'TutorialViewController':你的意思是'UISplitViewController'吗?”当我将其更改为 UISplitViewController 时,代码会运行,但每次打开应用程序时都会显示教程屏幕:(

以上是关于更改首次启动的初始视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如果应用程序首次启动 - 呈现 ModalView

创建第一个启动视图控制器

如何在成功登录后更改初始视图控制器?

Swift 仅在使用导航控制器首次启动时显示视图

应用程序首次运行时加载所有标签栏视图

iOS首次启动问题