fix(ios): getVisibleViewController maximum call stack exceeded

This commit is contained in:
Nathan Walker
2021-01-23 11:59:21 -08:00
parent d94b5984fc
commit 41daa4e408

View File

@ -96,19 +96,12 @@ export namespace iOSNativeHelper {
} }
export function getVisibleViewController(rootViewController: UIViewController): UIViewController { export function getVisibleViewController(rootViewController: UIViewController): UIViewController {
if (rootViewController.presentedViewController) { let viewController = rootViewController;
return getVisibleViewController(rootViewController.presentedViewController);
}
if (rootViewController.isKindOfClass(UINavigationController.class())) { while (viewController && viewController.presentedViewController) {
return getVisibleViewController((<UINavigationController>rootViewController).visibleViewController); viewController = viewController.presentedViewController;
} }
return viewController;
if (rootViewController.isKindOfClass(UITabBarController.class())) {
return getVisibleViewController(<UITabBarController>rootViewController);
}
return rootViewController;
} }
export function applyRotateTransform(transform: CATransform3D, x: number, y: number, z: number): CATransform3D { export function applyRotateTransform(transform: CATransform3D, x: number, y: number, z: number): CATransform3D {
@ -125,33 +118,33 @@ export namespace iOSNativeHelper {
} }
return transform; return transform;
} }
export function createUIDocumentInteractionControllerDelegate(): NSObject { export function createUIDocumentInteractionControllerDelegate(): NSObject {
@NativeClass @NativeClass
class UIDocumentInteractionControllerDelegateImpl extends NSObject implements UIDocumentInteractionControllerDelegate { class UIDocumentInteractionControllerDelegateImpl extends NSObject implements UIDocumentInteractionControllerDelegate {
public static ObjCProtocols = [UIDocumentInteractionControllerDelegate]; public static ObjCProtocols = [UIDocumentInteractionControllerDelegate];
public getViewController(): UIViewController { public getViewController(): UIViewController {
const app = UIApplication.sharedApplication; const app = UIApplication.sharedApplication;
return app.keyWindow.rootViewController; return app.keyWindow.rootViewController;
} }
public documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) { public documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) {
return this.getViewController(); return this.getViewController();
} }
public documentInteractionControllerViewForPreview(controller: UIDocumentInteractionController) { public documentInteractionControllerViewForPreview(controller: UIDocumentInteractionController) {
return this.getViewController().view; return this.getViewController().view;
} }
public documentInteractionControllerRectForPreview(controller: UIDocumentInteractionController): CGRect { public documentInteractionControllerRectForPreview(controller: UIDocumentInteractionController): CGRect {
return this.getViewController().view.frame; return this.getViewController().view.frame;
} }
} }
return new UIDocumentInteractionControllerDelegateImpl(); return new UIDocumentInteractionControllerDelegateImpl();
} }
export function isRealDevice() { export function isRealDevice() {
try { try {