From 41daa4e408b645beeef7c3e6063514314334d95e Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 23 Jan 2021 11:59:21 -0800 Subject: [PATCH] fix(ios): getVisibleViewController maximum call stack exceeded --- packages/core/utils/native-helper.ios.ts | 69 +++++++++++------------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/packages/core/utils/native-helper.ios.ts b/packages/core/utils/native-helper.ios.ts index ebddd3f0f..a9db0611a 100644 --- a/packages/core/utils/native-helper.ios.ts +++ b/packages/core/utils/native-helper.ios.ts @@ -96,19 +96,12 @@ export namespace iOSNativeHelper { } export function getVisibleViewController(rootViewController: UIViewController): UIViewController { - if (rootViewController.presentedViewController) { - return getVisibleViewController(rootViewController.presentedViewController); - } + let viewController = rootViewController; - if (rootViewController.isKindOfClass(UINavigationController.class())) { - return getVisibleViewController((rootViewController).visibleViewController); + while (viewController && viewController.presentedViewController) { + viewController = viewController.presentedViewController; } - - if (rootViewController.isKindOfClass(UITabBarController.class())) { - return getVisibleViewController(rootViewController); - } - - return rootViewController; + return viewController; } export function applyRotateTransform(transform: CATransform3D, x: number, y: number, z: number): CATransform3D { @@ -125,33 +118,33 @@ export namespace iOSNativeHelper { } return transform; - } - - export function createUIDocumentInteractionControllerDelegate(): NSObject { - @NativeClass - class UIDocumentInteractionControllerDelegateImpl extends NSObject implements UIDocumentInteractionControllerDelegate { - public static ObjCProtocols = [UIDocumentInteractionControllerDelegate]; - - public getViewController(): UIViewController { - const app = UIApplication.sharedApplication; - - return app.keyWindow.rootViewController; - } - - public documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) { - return this.getViewController(); - } - - public documentInteractionControllerViewForPreview(controller: UIDocumentInteractionController) { - return this.getViewController().view; - } - - public documentInteractionControllerRectForPreview(controller: UIDocumentInteractionController): CGRect { - return this.getViewController().view.frame; - } - } - return new UIDocumentInteractionControllerDelegateImpl(); - } + } + + export function createUIDocumentInteractionControllerDelegate(): NSObject { + @NativeClass + class UIDocumentInteractionControllerDelegateImpl extends NSObject implements UIDocumentInteractionControllerDelegate { + public static ObjCProtocols = [UIDocumentInteractionControllerDelegate]; + + public getViewController(): UIViewController { + const app = UIApplication.sharedApplication; + + return app.keyWindow.rootViewController; + } + + public documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) { + return this.getViewController(); + } + + public documentInteractionControllerViewForPreview(controller: UIDocumentInteractionController) { + return this.getViewController().view; + } + + public documentInteractionControllerRectForPreview(controller: UIDocumentInteractionController): CGRect { + return this.getViewController().view.frame; + } + } + return new UIDocumentInteractionControllerDelegateImpl(); + } export function isRealDevice() { try {