2014-03-02 89 views
26

由於支持XS iOS故事板的集成,所以我希望能夠將這個特性與MVVMCross結合使用。對Xamarin.iOS的MVVMCross支持故事板

基本上它看起來有點像它不應該工作,因爲故事板指示視圖項目中的導航層次結構,而不是像MVVMCross這樣的視圖模型項目。

但是,如果有一種方法可以讓2個人一起工作,那將是非常棒的。

有沒有人知道這可能會實現?

歡呼聲中,特里斯坦

回答

29

有發表文章,用故事板的至少一個樣本 - 相當奇怪的命名eh - https://github.com/slodge/eh

該樣品由工作:

這樣的使用方法將Mvx數據綁定添加到主要由故事板驅動的應用程序非常簡單。


另外,如果開發商寧願讓MVX ShowViewModel導航系統控制屏幕的流動 - 但也會喜歡這些屏幕將故事板內設計的,那麼這是可以通過開發一個正常MvvmCross應用,但使用從故事板加載ViewController的自定義Presenter

在MvvmCross的V3.1.1,您可以在ViewsContainer水平做到這一點:

+4

第二種方法是絕對要做到這一點,只要我們發展真正的跨平臺應用程序正確方法。最好使用ShowViewModel進行導航,並在平臺之間共享此邏輯。 –

+0

所以 - 大概這將涉及一個故事板沒有Segues定義。任何已定義的分段將被忽略? –

+0

第二種方法似乎很好 - 但它在InstantiateViewCOntroller期間正在崩潰。無論如何,導航可能不太容易。 – Obiwan007

11

在一個大型項目中,在單個故事板中保留所有視圖可能令人望而生畏。

我更喜歡創建每一個視圖故事板;我修改了集裝箱在斯圖爾特的回答來尋找匹配視圖類情節串連圖板,並退回到主故事板,如果沒有找到:

public class StoryBoardContainer : MvxTouchViewsContainer 
{ 
    protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request) 
    { 
     UIStoryboard storyboard; 
     try 
     { 
      storyboard = UIStoryboard.FromName(viewType.Name, null); 
     } 
     catch (Exception) 
     { 
      storyboard = UIStoryboard.FromName("StoryBoard", null); 
     } 
     return (IMvxTouchView) storyboard.InstantiateViewController(viewType.Name); 
    } 
} 

買者1:實例viewcontrollers這樣,你必須設置故事板ID在編輯器:

Storyboard ID

買者2:確保你的看法繼承MvxViewController具有構造public MyView(IntPtr handle) : base(handle),因爲這是用來實例從故事板視圖控制器。

+0

也可以製作支持Storyboard和Xib的容器。也許這可以添加到MvvmCross的默認容器中? –

+0

確保您的視圖類繼承自MvxTouchView,並且您已經在上面的註釋2中實現了構造函數。否則沒有線索,對不起。 –

+0

有沒有人嘗試過這種方法,發現他們的AutoLayout約束都沒有受到尊重?我通過設計器應用約束,在設計器中按預期運行,但在運行時它們完全混亂 –

3

我做了使用mvvmcross和iOS故事板樣本項目(TipCalc):https://github.com/nicruo/TipCalc.Storyboard

+0

您的演示作品。我試圖複製這個樣本,似乎我做了一些錯誤的事情。你能幫忙嗎? https://github.com/slown1/Xamarin.iOS-Storyboard –

8

故事板的支持,現在是MvvmCross的一部分。如Geir的回答中所述,使用每個Storyboard方法的一個ViewController,設置Storyboard ID,並用[MvxFromStoryboard]修飾您的MvxViewController部分類。請參閱我的blog上的示例代碼。

+1

在MvxFromStoryboard裝飾器中設置故事板名稱的有用參考:https://www.mvvmcross.com/documentation/platform/ios-user-interfaces-approaches#storyboards –