【问题标题】: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];
}

【问题讨论】:

    标签: ios objective-c xcode viewcontroller


    【解决方案1】:

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

    1. 在 Interface Builder 中选中“Is Initial VC”复选框或
    2. 在 -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 时,代码会运行,但每次打开应用程序时都会显示教程屏幕:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2012-06-02
    • 2017-11-17
    相关资源
    最近更新 更多