如何使用 Objective-C 在 iOS 13 中获取 rootViewController?
How to get rootViewController in iOS 13 using Objective-C?
我正在尝试使用 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
)时,出现以下错误:
Property 'window' cannot be found in forward class object 'UIWindowSceneDelegate'
但是当我转到 UIWindowSceneDelegate
的定义时,我看到 window
属性:
那么使用 Objective-C 在 iOS 13 中获取 rootViewController 的正确方法是什么?
将您的代码更改为:
for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
if ([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]) {
UIWindow *window = [(id<UIWindowSceneDelegate>)scene.delegate window];
}
}
当您打开 UIKit
s UIWindowScene.h
头文件时,它包含:
@class UIScreen, UIWindow, UIWindowSceneDelegate, UISceneDestructionRequestOptions, CKShareMetadata, UISceneSizeRestrictions;
看,UIWindowSceneDelegate
。这是前向声明。
阅读 this answer 了解什么是前向声明。
我正在尝试使用 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
)时,出现以下错误:
Property 'window' cannot be found in forward class object 'UIWindowSceneDelegate'
但是当我转到 UIWindowSceneDelegate
的定义时,我看到 window
属性:
那么使用 Objective-C 在 iOS 13 中获取 rootViewController 的正确方法是什么?
将您的代码更改为:
for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
if ([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]) {
UIWindow *window = [(id<UIWindowSceneDelegate>)scene.delegate window];
}
}
当您打开 UIKit
s UIWindowScene.h
头文件时,它包含:
@class UIScreen, UIWindow, UIWindowSceneDelegate, UISceneDestructionRequestOptions, CKShareMetadata, UISceneSizeRestrictions;
看,UIWindowSceneDelegate
。这是前向声明。
阅读 this answer 了解什么是前向声明。