public override void Show(Cirrious.MvvmCross.Touch.Views.IMvxTouchView view) { // When initializing views for the first time, we will setup if (view is LoginViewController) { _loginViewController = (LoginViewController) view; base.Show(view); } else if (view is MainViewController) { _mainViewController = (MainViewController) view; base.Show(view); } else { if (PresentView(view) == false) { // No views can handle presenting this view...just push it on the navigation stack as last resort. base.Show(view); } } _viewPresenters.Add(view); var viewPresenter = view as IViewPresenter; if (viewPresenter != null) { viewPresenter.ViewPresenterAdded(); } }
private void CloseViewController(IMvxTouchView viewController) { if (viewController != null) { _viewPresenters.Remove(viewController); bool viewClosed = false; var viewPresenter = viewController as IViewPresenter; if (viewPresenter != null) { viewPresenter.ViewPresenterRemoved(); } if (_loginViewController != null && _loginViewController == viewController) { base.Close(_loginViewController.ViewModel); _loginViewController = null; } else if (_mainViewController != null && _mainViewController == viewController) { base.Close(_mainViewController.ViewModel); _mainViewController = null; } else if (_presentedViews.Contains(viewController)) { // This view is already presented - we don't handle the close for this. They should // have removed themselves on ViewPresenterRemoved _presentedViews.Remove(viewController); } else { // Close another view that was not presented, was not login, or not main view controller base.Close(viewController.ViewModel); } } }