如何使用Objective-C在iOS 13中获取rootViewController?

时间:2020-07-20 16:37:51

标签: ios objective-c uiscenedelegate uiwindowscene

我正在尝试使用Objective-C在iOS 13中获得rootViewController。我正在做这样的事情:

for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
    UIWindowScene *windowScene = (UIWindowScene *) scene;
    UIWindowSceneDelegate *windowSceneDelegate = (UIWindowSceneDelegate *) windowScene.delegate;
    windowSceneDelegate.window = ...
}

但是当我尝试访问window中的windowSceneDelegate.window =属性(以获取rootViewController)时,出现以下错误:

在正向类对象“ UIWindowSceneDelegate”中找不到属性“窗口”

但是当我转到UIWindowSceneDelegate的定义时,我看到一个window属性:

enter image description here

那么,使用Objective-C在iOS 13中获取rootViewController的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

将您的代码更改为:

for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
    if ([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]) {
        UIWindow *window = [(id<UIWindowSceneDelegate>)scene.delegate window];
    }
}

打开UIKit的{​​{1}}头文件时,它包含:

UIWindowScene.h

看,有@class UIScreen, UIWindow, UIWindowSceneDelegate, UISceneDestructionRequestOptions, CKShareMetadata, UISceneSizeRestrictions; 。这是前向声明。

阅读this answer以了解什么是前向声明。