public override void Show(MvxViewModelRequest request) { if (request.PresentationValues != null) { var viewCreator = GetViewCreator(); // More info at: // - http://gregshackles.com/presenters-in-mvvmcross-using-presentation-values/ // - https://gist.github.com/gshackles/5735595 if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.CLEAR_STACK)) { var nextViewController = (UIViewController)viewCreator.CreateView(request); if (MasterNavigationController.TopViewController.GetType() != nextViewController.GetType()) { MasterNavigationController.PopToRootViewController(false); MasterNavigationController.PushViewController(nextViewController, false); } return; } else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.MAKE_IT_THE_FIRST_ONE)) { MasterNavigationController.SetViewControllers(new UIViewController[] { }, false); } else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.BACK_OR_IN_PLACE)) { var nextViewController = (UIViewController)viewCreator.CreateView(request); var existingViewController = MasterNavigationController.ViewControllers.FirstOrDefault( vc => vc.GetType() == nextViewController.GetType() && vc != CurrentTopViewController); if (existingViewController != null) { MasterNavigationController.PopToViewController(existingViewController, true); } else { var transition = new CATransition { Duration = 0.3, Type = CAAnimation.TransitionPush, Subtype = CAAnimation.TransitionFade }; MasterNavigationController.PopViewController(false); MasterNavigationController.View.Layer.AddAnimation(transition, null); MasterNavigationController.PushViewController(nextViewController, false); } return; } } base.Show(request); }
protected virtual void ShowModalCardViewController(UIViewController viewController, MvxBasePresentationAttribute attribute, MvxViewModelRequest request) { viewController.ModalPresentationStyle = UIModalPresentationStyle.Custom; viewController.TransitioningDelegate = FromBottomTransitionDelegate; MasterNavigationController.PresentViewController(viewController, true, null); ModalViewControllers.Add(viewController); FromBottomTransitionDelegate.WireToViewController(viewController, () => ModalViewControllers.Remove(viewController)); }
/// <summary> /// Shows the first view. /// </summary> /// <param name="viewController">The view controller.</param> protected override void ShowFirstView(UIViewController viewController) { base.ShowFirstView(viewController); // So lets push our JaSidePanels viewController and then our first viewController in the centre panel to start things off // We will let our initial viewmodel load up the panels as required MasterNavigationController.NavigationBarHidden = true; MasterNavigationController.PushViewController(_multiPanelController, false); _multiPanelController.CenterPanel = new UINavigationController(viewController); }
private void clearStackAndNavigate(MvxViewModelRequest request) { var nextViewController = (UIViewController)ViewCreator.CreateView(request); if (MasterNavigationController.TopViewController.GetType() != nextViewController.GetType()) { MasterNavigationController.PopToRootViewController(false); MasterNavigationController.ViewControllers = new UIViewController[] { nextViewController }; } }
public override void Close(IMvxViewModel toClose) { if (toClose is CommonProfileViewModel || toClose is RentProfileViewModel || toClose is OwnProfileViewModel) { MasterNavigationController.PopViewController(true); } else { base.Close(toClose); } }
protected override void ShowChildViewController(UIViewController viewController, MvxChildPresentationAttribute attribute, MvxViewModelRequest request) { if (request.ViewModelType == typeof(LoginViewModel)) { MasterNavigationController.View.Layer.AddAnimation(fadeAnimation, CALayer.Transition); MasterNavigationController.PushViewController(viewController, false); return; } base.ShowChildViewController(viewController, attribute, request); }
public override void Close(IMvxViewModel viewModel) { if (viewModel is LoginViewModel) { MasterNavigationController.View.Window.Layer.AddAnimation(fadeAnimation, CALayer.Transition); MasterNavigationController.PopViewController(false); return; } base.Close(viewModel); }
/// <summary> /// Show the specified request. /// </summary> /// <param name="request">Request.</param> public override void Show(MvxViewModelRequest request) { //if Host null then set the rootview //Handling viewmodel navigations from LoginViewModel if (request.ParameterValues != null && request.ParameterValues.Keys.Contains("pop")) { MasterNavigationController.PopViewController(true); return; } base.Show(request); return; }
private bool PopViewControllersUntilViewModel(Type viewModelType) { for (int i = MasterNavigationController.ViewControllers.Length - 1; i >= 0; i--) { if (MasterNavigationController.ViewControllers[i] is MvxViewController mvc) { if (mvc.ViewModel.GetType() == viewModelType) { MasterNavigationController.PopToViewController(mvc, false); return(true); } } } return(false); }
protected override void ShowChildViewController(UIViewController viewController, MvxChildPresentationAttribute attribute, MvxViewModelRequest request) { //Fix to show tabchild child view correctly if (MasterNavigationController != null) { MasterNavigationController.PushViewController(viewController, attribute.Animated); if (viewController is IMvxTabBarViewController) { TabBarViewController = viewController as IMvxTabBarViewController; } return; } //throw new MvxException($"Trying to show View type: {viewController.GetType().Name} as child, but there is no current stack!"); }
public virtual void Show(IMvxTouchView view) { var viewController = view as UIViewController; if (viewController == null) { throw new MvxException("Passed in IMvxTouchView is not a UIViewController"); } if (MasterNavigationController == null) { ShowFirstView(viewController); } else { MasterNavigationController.PushViewController(viewController, true /*animated*/); } }
public override void Show(Cirrious.MvvmCross.Touch.Views.IMvxTouchView view) { if (MasterNavigationController == null) { base.Show(view); return; } if (MasterNavigationController.ViewControllers.Length <= 1) { base.Show(view); return; } MasterNavigationController.PopViewController(false); MasterNavigationController.PushViewController( view as UIViewController, true); }
public override void Show(MvxViewModelRequest request) { if (request.PresentationValues != null) { if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ClearStack)) { foreach (var vc in MasterNavigationController.ViewControllers) { vc.DismissViewController(true, null); } var nextViewController = this.CreateViewControllerFor(request) as UIViewController; if (MasterNavigationController.TopViewController.GetType() != nextViewController.GetType()) { MasterNavigationController.PopToRootViewController(false); MasterNavigationController.PushViewController(nextViewController, false); } return; } if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.NoAnimation)) { var nextViewController = this.CreateViewControllerFor(request) as UIViewController; MasterNavigationController.PushViewController(nextViewController, false); return; } if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.TransitionLeftToRight)) { var nextViewController = this.CreateViewControllerFor(request) as UIViewController; MasterNavigationController.PushControllerWithTransition(nextViewController, UIViewAnimationOptions.TransitionCurlDown); return; } } base.Show(request); }
public override void Show(MvvmCross.Core.ViewModels.MvxViewModelRequest request) { if (request.PresentationValues != null) { #region ClearStack if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ClearStack)) { //MasterNavigationController.PopToRootViewController(false); var nextViewController = (UIViewController)ViewCreator.CreateView(request); MasterNavigationController.PushViewController(nextViewController, true); return; } #endregion #region ShowBack if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ShowBack)) { var nextViewController = (UIViewController)ViewCreator.CreateView(request); var currentViewController = MasterNavigationController.TopViewController; bool animated = false; while (!animated && currentViewController != null && currentViewController.GetType() != nextViewController.GetType()) { if (MasterNavigationController.ViewControllers.Length > 1) { var backViewController = MasterNavigationController.ViewControllers[MasterNavigationController.ViewControllers.Length - 2]; if (backViewController.GetType() == nextViewController.GetType()) { animated = true; } } else { break; } MasterNavigationController.PopViewController(animated); if (animated) { MemoryUtils.DelayReleaseObject(2000, currentViewController); } else { MemoryUtils.ReleaseObject(currentViewController); } currentViewController = MasterNavigationController.TopViewController; } if (MasterNavigationController.ViewControllers.Length <= 1) { MasterNavigationController.PushViewController(nextViewController, true); } return; } #endregion #region CloseCurrentAndShow if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.CloseCurrentAndShow)) { // let make a async task to remove current from history to not make UI flash System.Threading.Tasks.Task.Run(async() => { await System.Threading.Tasks.Task.Delay(1000); if (closeViewController == null) { return; } MasterNavigationController.InvokeOnMainThread(async() => { //wait for until top view controller is showed while (closeViewController != MasterNavigationController.TopViewController) { await System.Threading.Tasks.Task.Delay(100); } int countVc = MasterNavigationController.ViewControllers.Length; if (countVc > 1) { UIViewController releaseViewController = MasterNavigationController.ViewControllers[countVc - 2]; UIViewController[] newHistory = new UIViewController[countVc - 1]; for (int i = 0; i < countVc - 2; i++) { newHistory[i] = MasterNavigationController.ViewControllers[i]; } newHistory[countVc - 2] = MasterNavigationController.ViewControllers[countVc - 1]; MasterNavigationController.ViewControllers = newHistory; MemoryUtils.ReleaseObject(releaseViewController); } closeViewController = null; }); }); } #endregion } base.Show(request); }
public virtual ValueTask <bool> CloseModalViewController() { MasterNavigationController?.PopViewController(true); return(new ValueTask <bool>(true)); }
public virtual Task <bool> CloseModalViewController() { MasterNavigationController.PopViewController(true); return(Task.FromResult(true)); }
public virtual void CloseModalViewController() { MasterNavigationController.PopViewController(true); }
public override void Close(IMvxViewModel toClose) { //We make an array of this to make a snapshot before modifying presentation hosts. var presentationHostsToDrop = (from host in presentationHosts where ((IMvxTouchView)host).ViewModel == toClose select host).ToArray(); foreach (var host in presentationHostsToDrop) { presentationHosts.Remove(host); } var viewsPresentedByHosts = removalAgentsByView.Keys; var relevantViewsPresentedByHosts = (from view in viewsPresentedByHosts where view.ViewModel == toClose select view).ToArray(); if (relevantViewsPresentedByHosts.Count() > 0) { foreach (var view in relevantViewsPresentedByHosts) { var removalAgent = removalAgentsByView [view]; removalAgent(); removalAgentsByView.Remove(view); } } else if (MasterNavigationController != null) { var topView = MasterNavigationController.TopViewController as IMvxView; IMvxViewModel topViewModel; if (topView != null) { topViewModel = topView.ReflectionGetViewModel(); } else { // #if DEBUG // MvxTrace.Warning ("Don't know how to close this ViewModel; topmost is not a touchview"); // #endif return; } if (topViewModel == toClose) { if (MasterNavigationController.ViewControllers.Length > 1) { MasterNavigationController.PopViewController(true); } else { MasterNavigationController.WillMoveToParentViewController(null); MasterNavigationController.RemoveFromParentViewController(); MasterNavigationController.View.RemoveFromSuperview(); MasterNavigationController = null; } } else { // #if DEBUG // MvxTrace.Warning ("Don't know how to close this ViewModel; topmost view does not present this viewmodel"); // #endif return; } } else { // #if DEBUG // MvxTrace.Warning("Don't know how to close this ViewModel; there are no views governed by the RichTouchPresenter or its MasterNavigationController"); // #endif } }
public override void Show(MvxViewModelRequest request) { if (request.PresentationValues != null) { if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ParkingReserved)) { var vc = MasterNavigationController.TopViewController; while (!(vc is ParkingReservedView)) { ReleaseTimerIfNeeded(vc); MasterNavigationController.PopViewController(false); //vc.Dispose(); vc = MasterNavigationController.TopViewController; } return; } else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.Menu)) { var vc = MasterNavigationController.TopViewController; while (!(vc is MenuView)) { Console.WriteLine(vc); ReleaseTimerIfNeeded(vc); if (vc is ParkingSearchView) { MasterNavigationController.PopViewController(true); return; } else { MasterNavigationController.PopViewController(false); } //vc.Dispose(); vc = MasterNavigationController.TopViewController; } return; } else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.Search)) { var vc = MasterNavigationController.TopViewController; while (!(vc is ParkingSearchView)) { ReleaseTimerIfNeeded(vc); MasterNavigationController.PopViewController(false); //vc.Dispose(); vc = MasterNavigationController.TopViewController; } return; } else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ParkingList)) { var vc = MasterNavigationController.TopViewController; while (!(vc is ParkingListsView) && !(vc is MyReservationsView)) { ReleaseTimerIfNeeded(vc); MasterNavigationController.PopViewController(false); //vc.Dispose(); vc = MasterNavigationController.TopViewController; } return; } else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ClearStack)) { MasterNavigationController.PopToRootViewController(false); } } //prevent reshowing the current view controller (e.g 10 minutes before leaving ) if (MasterNavigationController != null && MasterNavigationController.TopViewController != null) { var topvc = MasterNavigationController.TopViewController; if (topvc != null && topvc is MvxViewController && request.ViewModelType == (topvc as MvxViewController).ViewModel.GetType()) { return; } } base.Show(request); }