我的应用程序有一个设置屏幕,如果满足某些条件,应该在根视图控制器上以模态方式显示.
我已经浏览了SO和互联网,到目前为止最接近的答案是如何去做这个:
AppDelegate,rootViewController和presentViewController
但是这种方法存在两个问题:
Unbalanced calls to begin/end appearance transitions for UITabBarController: 0x7fe20058d570.
animated:NO了我的presentViewController方法).我知道我可以动态设置我的根控制器,applicationDidFinishLaunchingWithOptions:但我特别希望以模态方式呈现设置屏幕,这样当用户完成它时,它会解散并显示应用程序的真实第一个视图.这就是说,我不想动态地将我的根视图控制器更改为我的设置屏幕,并在用户完成设置时以模态方式呈现我的应用体验.
在我的根视图控制器viewDidLoad方法上呈现视图控制器也会在第一次启动应用程序时导致UI明显闪烁.
是否有可能在应用程序呈现任何内容之前以编程方式呈现视图控制器,以便第一个视图就位于模态视图控制器中?
更新:感谢您的评论,按照建议添加我当前的代码:
在我的AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
[self.window makeKeyAndVisible];
[self.window.rootViewController presentViewController:[storyboard instantiateViewControllerWithIdentifier:@"setupViewController"] animated:NO completion:NULL];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这样做我需要的除了它在应用程序启动时简要显示窗口的根视图控制器一秒钟的事实,然后淡化setupViewController,我发现奇怪的是我提出它没有动画和褪色不是一个模态无论如何都会呈现视图控制器.
让我接近的唯一一件事是在根视图控制器的视图中手动添加视图确实加载方法如下:
- (void)viewDidLoad
{
[self.view addSubview:setupViewController.view];
[self addChildViewController:setupViewController];
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是我不能再"原生"地关闭setupViewController,现在需要处理视图层次结构并自己动画,如果这是唯一的解决方案,这很好,但我希望有一个在根视图控制器显示之前,在没有动画的情况下以模态方式添加视图控制器的认可方式.
更新2:在尝试了很多事情并等待2个月的答案之后,这个问题提出了最有创意的解决方案:
我想是时候接受在根视图控制器出现之前不能在没有动画的情况下以模态方式呈现视图的时候了.但是,该线程中的建议是创建一个启动屏幕的实例,并将其保持为超过默认值,直到模态视图控制器有机会出现.