diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs index 394ff0952..efe4bd639 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs @@ -37,6 +37,12 @@ public PopupRenderer() { } + [Preserve(Conditional = true)] + public PopupRenderer(UIViewController viewController) + { + ViewController = viewController; + } + public void SetElementSize(Size size) => Control?.SetElementSize(size); @@ -134,18 +140,27 @@ void CreateControl() void SetViewController() { IVisualElementRenderer currentPageRenderer; - var modalStackCount = Application.Current.MainPage?.Navigation?.ModalStack?.Count ?? 0; - var mainPage = Application.Current.MainPage; - if (modalStackCount > 0) + var page = Application.Current.MainPage; + var modalStackCount = page?.Navigation.ModalStack.Count ?? 0; + if (modalStackCount > 0 && page is not null) { var index = modalStackCount - 1; - currentPageRenderer = Platform.GetRenderer(mainPage!.Navigation!.ModalStack![index]); + page = page.Navigation.ModalStack[index]; + currentPageRenderer = Platform.GetRenderer(page); + } + else + { + currentPageRenderer = Platform.GetRenderer(page); + } + + if (currentPageRenderer == null) + { + ViewController ??= page?.CreateViewController(); } else { - currentPageRenderer = Platform.GetRenderer(mainPage); + ViewController ??= currentPageRenderer.ViewController; } - ViewController = currentPageRenderer.ViewController; } void SetEvents()