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

Posted

技术标签:

【中文标题】iOS - 如果应用程序首次启动 - 呈现 ModalView【英文标题】:iOS - If app has launched for the first time - Presenting ModalView 【发布时间】:2014-08-21 16:50:03 【问题描述】:

我想出了如何在应用程序启动时呈现两个不同的视图控制器,如果我不以模态方式呈现它们,它就可以正常工作。如果我更改代码,它会以某种方式显示空白视图控制器。 从 -> self.window.rootViewController = 登陆VC; To-> [self.window.rootViewController presentViewController:landingVC animated:YES completion:nil];

这是我的应用委托中的完整代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *tabbarController = [storyboard instantiateViewControllerWithIdentifier:@"TabBarViewController"];
UIViewController *landingVC = [storyboard instantiateViewControllerWithIdentifier:@"LandingViewController"];

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) 

        self.window.rootViewController = tabbarController;
  else 
  [self.window.rootViewController presentViewController:landingVC animated:YES completion:nil];
      

[self.window makeKeyAndVisible];
return YES;

AFAIK,这就是 modalVC 的显示方式。我已经验证了 storyboardID 并检查了两个视图控制器的“使用 storyboardID”。

【问题讨论】:

【参考方案1】:

如果应用程序之前已启动,您正在做的是将根视图控制器设置为 tabbarController,否则您将告诉应用程序的根视图控制器(尚未设置且尚不存在)呈现视图控制器。

如果你把 NSLog(@"%@", self.window.rootViewController);在 presentViewController 行上方,您将返回 nil,这意味着您正试图告诉 nil 做某事,这当然是行不通的。

我刚刚尝试过,它有效:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    UIViewController *testRootVC = [UIViewController new];
    testRootVC.view.backgroundColor = [UIColor blueColor];
    self.window.rootViewController = testRootVC;

    [self.window makeKeyAndVisible];

    if (YES) 
        UIViewController *testModalVC = [UIViewController new];
        testModalVC.view.backgroundColor = [UIColor redColor];
        [testRootVC presentViewController:testModalVC animated:YES completion:nil];
    

    return YES;

【讨论】:

是的。我同意并且有点猜到了。但是我不确定是否先将 tabbarVC 设为 rootview,然后再展示 modalview 是否会有所帮助。有什么建议吗? 看看我刚刚做的编辑。看来,您想要做的是将标签栏控制器设置为根视图,告诉窗口 makeKeyAndVisible,如果这是第一次启动,则显示模态。试试看,然后告诉我。 很奇怪。它不适合我。一些调试应该修复它。谢谢。顺便说一句,您是否持有“B 许可证”?看起来你已经掌握了隧道:) 从来没有听说过...这是什么? 我的意思是跳伞执照。

以上是关于iOS - 如果应用程序首次启动 - 呈现 ModalView的主要内容,如果未能解决你的问题,请参考以下文章

在应用启动时显示 ViewController

iOS应用轮换导致冻结[关闭]

防止在首次启动 iOS 时调用 AFNetworking 可达性状态

iOS Safari不会首次呈现整个页面

如何设置 iOS 应用程序的首次启动

检测iOS应用程序的首次启动[重复]