2014-01-08 44 views
3

我正在爲使用mvvmcross的iOS項目工作。應用導航是這樣的:首先它從啓動畫面(1)開始,它們導航到(2),在3個選項之間進行選擇的視圖,在視圖(3)和(4)中獲得一個列表,也可以導航回(2),如果您選擇(3)中的某個項目,則以模態方式導航到(5)。最後,所有的導航結束於(6),一個漢堡包菜單的視圖。爲我的mvvmcross項目創建自定義演示者

所以我有傳統的導航(帶後退按鈕),模態視圖和漢堡包菜單在最後。

如果有人能夠幫助我或指導我瞭解如何爲此導航方案創建自定義演示者,那將非常棒。

我使用MvxModalNavSupportTouchViewPresenter和SlidingPanelsNavigationViewController,但不知道如何來交換他們當我從(2,4,5)導航至(6)

回答

5

演示者只是一些實現https://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross/Core/Core/Views/IMvxViewPresenter.cs

public interface IMvxViewPresenter 
{ 
    void Show(MvxViewModelRequest request); 
    void ChangePresentation(MvxPresentationHint hint); 
} 

這是非常簡單的接口,它允許像ViewModels這樣的共享可移植代碼請求顯示更改。

對於您希望Show請求將整個用戶界面從一個顯示範例(模式導航控制器)更改爲另一個(滑動面板)的情況,則執行此操作的一種方法是實現具有兩個子顯示器的顯示器並簡單地將它們切換。

在僞代碼,這可能是這樣的:

public class MyPresenter : IMvxViewPresenter 
{ 
    private IMvxViewPresenter _currentPresenter; 

    private ModalPresenter _modalPresenter; 
    private SlidingPresenter _slidingPresenter; 

    private enum Style 
    { 
     Modal, Panels 
    } 

    private Style _currentStyle; 

    public MyPresenter() 
    { 
     // do whatever you need to do here to: 
     // - construct _modalPresenter and _slidingPresenter 
     // - make _modalPresenter attached to the window (via root view controller) 
     // - make _slidingPresenter hidden/unattached 

     _currentStyle = Style.Modal; 
     _currentPresenter = _modalPresenter; 
    } 


    public void Show(MvxViewModelRequest request) 
    { 
     if (_currentStyle == Style.Modal && 
      request.ViewModelType == typeof(WhateverViewModelIndicatesTheSwitchIsNeeded)) 
     { 
      DoSwitch(request); 
      return; 
     } 

     _currentPresenter.Show(request); 
    } 

    public void ChangePresentation(MvxPresentationHint hint) 
    { 
     _currentPresenter.ChangePresentation(hint); 
    } 

    private void DoSwitch(MvxViewModelRequest request) 
    { 
     // do whatever is necessary to: 
     // - remove _modalPresenter from the window 
     // - add _panelPresenter to the window 
     // - show `request` within _panelPresenter 

     _currentPresenter = _panelPresenter; 
     _currentStyle = Style.Panelsl 
    } 
} 

顯然,有一些細節這個僞代碼中填寫 - 例如有一些viewcontrollers被添加並從窗口中刪除 - 但這只是標準的iOS操作 - 例如看到很多問題和答案像Changing root view controller of a iOS WindowChange rootViewController from uiviewcontroller to uinavigationcontroller

+0

太棒了!我設法解決了問題,使用SlidingPanelsNavigationViewController作爲我獨特的導航控制器。非常感謝您的想法和答案。保持與mvvmcross良好的工作! –

+0

當人們說「滑動面板」導航是指他們使用Android的導航抽屜或其他東西獲得的導航? –

+0

是的,我的意思是這種類型的導航抽屜 –

相關問題