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); }); } }
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); }); }