如何解决目标 c:iOS 13+ 以编程方式设置初始根视图控制器
我正在尝试使用 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 而不是黑屏。有谁知道我错过了什么?
解决方法
你不应该自己创建一个 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];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。