目标 c:iOS 13+ 以编程方式设置初始根视图控制器
Posted
技术标签:
【中文标题】目标 c:iOS 13+ 以编程方式设置初始根视图控制器【英文标题】:Objective c: iOS 13+ programmatically setting initially root view controller 【发布时间】:2021-07-23 06:05:36 【问题描述】:我正在尝试使用 ios 14 中的 SceneDelegate 以编程方式设置初始根视图控制器(根本没有情节提要)。我已经关注https://medium.com/@sapa.tech/xcode-11-3-remove-storyboard-from-project-6c48c9d11123 从我的应用程序中删除故事板,并且在Why is manually setup root view controller showing black screen?、Set root view controller iOS 13 和iOS 13: Swift - 'Set application root view controller programmatically' does not work 中迅速看到了这个问题的许多答案。但是,我正在寻找有关如何在目标 C 中执行此操作的提示。到目前为止,我的场景委托中有这个,其中 ViewController 是我试图设置为根视图控制器的类:
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
UIWindowScene * winscene = [[UIWindowScene alloc]initWithSession:session connectionOptions:connectionOptions];
[self.window setWindowScene:winscene];
ViewController * viewController = [[ViewController alloc]init];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
在我的 AppDelegate 中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
return YES;
我尝试将我找到的 Swift 答案翻译为目标 c,但我仍然在模拟器上出现黑屏。该应用程序构建良好,没有错误,但我无法让 ViewController 显示而不是黑屏。有谁知道我错过了什么?
【问题讨论】:
【参考方案1】:您不应该自己创建 UIWindowScene,而是使用给定的一个作为参数:
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
self.window = [UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
ViewController * viewController = [[ViewController alloc]init];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
【讨论】:
以上是关于目标 c:iOS 13+ 以编程方式设置初始根视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从情节提要中选择初始视图控制器
如何在 ios 9 中以编程方式导航到另一个具有“当前上下文”表示的视图控制器,目标 C