Skip to content

Instantly share code, notes, and snippets.

@ChaseFlorell
Created May 21, 2014 20:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ChaseFlorell/c8aae0b8689b1f4bccca to your computer and use it in GitHub Desktop.
Save ChaseFlorell/c8aae0b8689b1f4bccca to your computer and use it in GitHub Desktop.
using System;
using Cirrious.MvvmCross.Binding.Touch.Views;
using Cirrious.MvvmCross.Touch.Views.Presenters;
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 MvxSlidingPanelsViewPresenter : MvxTouchViewPresenter
{
private readonly UIWindow _window;
public MvxSlidingPanelsViewPresenter(UIApplicationDelegate applicationDelegate, UIWindow window)
: base(applicationDelegate, window)
{
_window = window;
}
public SlidingPanelsNavController SlidingNavController { get { return MasterNavigationController as SlidingPanelsNavController; } }
public DefaultNavigationController DefaultNavController { get { return new DefaultNavigationController(new UIViewController()); } }
public UIViewController RootController { get; private set; }
protected override void ShowFirstView(UIViewController viewController)
{
// Show the first view
base.ShowFirstView(viewController);
// create the Sliding Panels View Controller and make it a child controller
// of the root controller
switch (viewController.GetType().Name)
{
case "RootView":
RootController.AddChildViewController(SlidingNavController);
RootController.View.AddSubview(SlidingNavController.View);
// use the first view to create the sliding panels
AddPanel<NavigationFragment>(PanelType.LeftPanel, 280);
break;
default:
RootController.AddChildViewController(DefaultNavController);
RootController.View.AddSubview(DefaultNavController.View);
break;
}
}
protected void AddPanel<T>(PanelType panelType, float width) where T : MvxView
{
var controller = new UIViewController();
var frame = UIScreen.MainScreen.Bounds;
frame.Width = width;
controller.View.Frame = frame;
var viewToAdd = (T)Activator.CreateInstance(typeof(T), width, SlidingNavController);
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:
SlidingNavController.InsertPanel(new LeftPanelContainer(controller));
break;
case PanelType.RightPanel:
SlidingNavController.InsertPanel(new RightPanelContainer(controller));
break;
case PanelType.BottomPanel:
SlidingNavController.InsertPanel(new BottomPanelContainer(controller));
break;
default:
throw new ArgumentException("PanelType is invalid");
}
}
protected override UINavigationController CreateNavigationController(UIViewController viewController)
{
var navController = new SlidingPanelsNavController(viewController);
RootController = new UIViewController();
return navController;
}
protected override void SetWindowRootViewController(UIViewController controller)
{
_window.AddSubview(RootController.View);
_window.RootViewController = RootController;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment