コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }