static async void OnCloseRequested(object sender, ModalPage.CloseModalRequestedEventArgs e)
        {
            var page = (ModalPage)sender;

            var viewController = PlatformMethods.GetRenderer(page).ViewController;

            if (viewController != null && !viewController.IsBeingDismissed)
            {
                // Hack: http://stackoverflow.com/questions/25762466/trying-to-dismiss-the-presentation-controller-while-transitioning-already
                DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, async() => {
                    e.ClosingPageTask = viewController.DismissViewControllerAsync(true);
                    await e.ClosingPageTask;
                    PlatformMethods.DisposeModelAndChildrenRenderers(page);
                });
            }
        }
Beispiel #2
0
        void OnDisplayPageModalRequested(object sender, ModalHostPage.DisplayPageModalRequestedEventArgs e)
        {
            e.PageToDisplay.Parent = this.Element;
            IVisualElementRenderer renderer = PlatformMethods.GetRenderer(e.PageToDisplay);

            if (renderer == null)
            {
                renderer = RendererFactory.GetRenderer(e.PageToDisplay);
                PlatformMethods.SetRenderer(e.PageToDisplay, renderer);
            }

            // HACK: http://stackoverflow.com/questions/25762466/trying-to-dismiss-the-presentation-controller-while-transitioning-already
            // Since the pop / close operation on the ModalPage is applying the hack, we might need to wait here too...
            DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, async() =>
            {
                e.DisplayingPageTask = this.PresentViewControllerAsync(renderer.ViewController, true);
            });
        }