【问题标题】:How to get rootViewController in iOS 13 using Objective-C?如何使用 Objective-C 在 iOS 13 中获取 rootViewController?
【发布时间】:2020-11-09 23:24:35
【问题描述】:

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

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

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

在转发类对象“UIWindowSceneDelegate”中找不到属性“窗口”

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

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

【问题讨论】:

    标签: ios objective-c uiscenedelegate uiwindowscene


    【解决方案1】:

    将您的代码更改为:

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

    当你打开UIKits UIWindowScene.h 头文件时,它包含:

    @class UIScreen, UIWindow, UIWindowSceneDelegate, UISceneDestructionRequestOptions, CKShareMetadata, UISceneSizeRestrictions;
    

    看,UIWindowSceneDelegate。这是前向声明。

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

    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 2020-01-24
      • 2020-01-30
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      相关资源
      最近更新 更多