public void ReplaceTopChildViewModel(UIViewController viewController) { if (SelectedIndex > 5 && (MoreNavigationController?.ViewControllers?.Any() ?? false)) { var lastViewController = (MoreNavigationController.ViewControllers.Last()).GetIMvxIosView(); if (lastViewController != null) { MoreNavigationController.PopViewController(true); return; } } if (SelectedViewController is UINavigationController navController && navController.ViewControllers != null) { if (navController.ViewControllers.Any()) { var newStack = navController.ViewControllers.Take(navController.ViewControllers.Length - 1) .Concat(new[] { viewController }).ToArray(); navController.SetViewControllers(newStack, true); } else { navController.PushViewController(viewController, true); } } }
public virtual bool ShowChildView(UIViewController viewController) { if (SelectedIndex > 5) // when more menu item is currently visible, selected index has value higher than 5 { MoreNavigationController.PushViewController(viewController, true); return(true); } var navigationController = SelectedViewController as UINavigationController; // if the current selected ViewController is not a NavigationController, then a child cannot be shown if (navigationController == null) { return(false); } navigationController.PushViewController(viewController, true); return(true); }
public virtual bool CloseChildViewModel(IMvxViewModel viewModel) { if (SelectedIndex > 5 && (MoreNavigationController?.ViewControllers?.Any() ?? false)) { var lastViewController = (MoreNavigationController.ViewControllers.Last()).GetIMvxIosView(); if (lastViewController != null && lastViewController.ViewModel == viewModel) { MoreNavigationController.PopViewController(true); return(true); } } if (SelectedViewController is UINavigationController navController && navController.ViewControllers != null && navController.ViewControllers.Any()) { // if the ViewModel to close if the last in the stack, close it animated if (navController.TopViewController.GetIMvxIosView().ViewModel == viewModel) { navController.PopViewController(true); return(true); } var controllers = navController.ViewControllers.ToList(); var controllerToClose = controllers.FirstOrDefault(vc => vc.GetIMvxIosView().ViewModel == viewModel); if (controllerToClose != null) { controllers.Remove(controllerToClose); navController.ViewControllers = controllers.ToArray(); return(true); } } return(false); }