目标 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

在目标 c 中以编程方式替换菜单视图

如何以编程方式设置根视图控制器?

以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图

设置根视图控制器,然后以编程方式导航到下一个视图