Created
May 23, 2014 03:51
-
-
Save ChaseFlorell/5a7267595a45c8dd7315 to your computer and use it in GitHub Desktop.
Custom Presenter not showing appropriate ViewModel when calling `ViewModel.ShowViewModel<MyViewModel>();`
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Cirrious.CrossCore; | |
using Cirrious.MvvmCross.Binding.Touch.Views; | |
using Cirrious.MvvmCross.Touch.Views; | |
using Cirrious.MvvmCross.Touch.Views.Presenters; | |
using Cirrious.MvvmCross.ViewModels; | |
using FutureState.AppCore.ViewModels; | |
using FutureState.BreathingRoom.Touch.Ui.Controllers; | |
using FutureState.BreathingRoom.Touch.Ui.Fragments; | |
using MonoTouch.UIKit; | |
using SlidingPanels.Lib.PanelContainers; | |
namespace FutureState.BreathingRoom.Touch.Ui.Presenters | |
{ | |
public class CustomPresenter : MvxTouchViewPresenter | |
{ | |
private readonly UIWindow _window; | |
private UINavigationController _navigationController; | |
public CustomPresenter(UIApplicationDelegate applicationDelegate, UIWindow window) | |
: base(applicationDelegate, window) | |
{ | |
_window = window; | |
} | |
public UIViewController RootController { get; private set; } | |
public override void Show(MvxViewModelRequest request) | |
{ | |
var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request); | |
RootController = new UIViewController(); | |
// This needs to be a Tab View | |
if (request.ViewModelType == typeof(AuthViewModel)) | |
{ | |
_navigationController = new EmptyNavController(viewController); | |
RootController.AddChildViewController(_navigationController); | |
RootController.View.AddSubview(_navigationController.View); | |
} | |
if (request.ViewModelType == typeof(RootViewModel)) | |
{ | |
_navigationController = new SlidingPanelsNavController(viewController); | |
RootController.AddChildViewController(_navigationController); | |
RootController.View.AddSubview(_navigationController.View); | |
AddSlidingPanel<NavigationFragment>(PanelType.LeftPanel, 280); | |
} | |
base.Show(request); | |
} | |
protected override void SetWindowRootViewController(UIViewController controller) | |
{ | |
_window.AddSubview(RootController.View); | |
_window.RootViewController = RootController; | |
} | |
protected void AddSlidingPanel<T>(PanelType panelType, float width) where T : MvxView | |
{ | |
var nav = (SlidingPanelsNavController)_navigationController; | |
var controller = new UIViewController(); | |
var frame = UIScreen.MainScreen.Bounds; | |
frame.Width = width; | |
controller.View.Frame = frame; | |
var viewToAdd = (T)Activator.CreateInstance(typeof(T), width, nav); | |
controller.Add(viewToAdd); | |
// Insert the view into a new container (of the right type) and insert | |
// that into the sliding panels controller | |
switch (panelType) | |
{ | |
case PanelType.LeftPanel: | |
nav.InsertPanel(new LeftPanelContainer(controller)); | |
break; | |
case PanelType.RightPanel: | |
nav.InsertPanel(new RightPanelContainer(controller)); | |
break; | |
case PanelType.BottomPanel: | |
nav.InsertPanel(new BottomPanelContainer(controller)); | |
break; | |
default: | |
throw new ArgumentException("PanelType is invalid"); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment