如何在MvvmCross中的另一个视图中实现SplitView?

时间:2013-07-18 09:50:34

标签: xamarin.ios xamarin mvvmcross

sample flow

如何使用MvvmCross实现此流程?我浏览了关于SplitView的N + 1教程,但是使用单个拆分视图作为主控制器和自定义存在。

对于我的应用,它以默认的提交者和& Home是主屏幕,我需要显示其中一个选项的拆分视图。这是否可以使用默认的UISplitViewController?或者我需要创建自定义控件吗?用户还需要导航回主屏幕。

1 个答案:

答案 0 :(得分:3)

MvvmCross演示者的界面非常小。

the N=24 video的拆分视图示例为:

public class SplitPresenter : MvxBaseTouchViewPresenter
{
    private SplitViewController _svc;

    public SplitPresenter(UIWindow window)
    {
        _svc = new SplitViewController();
        window.RootViewController = _svc;
    }

    public override void Show(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request)
    {
        var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);

        if (request.ViewModelType == typeof(FirstViewModel))
            _svc.SetLeft(viewController);
        else
            _svc.SetRight(viewController);
    }
}

由于这只是与UIKit交互的C#,因此用户可以扩展它。

例如,您可以:

  • 扩展您的演示者以包含导航控制器和splitview控制器,然后您可以在演出请求期间适当地更改RootViewController。

  • 或者您可以考虑将您的splitviewcontroller推送为导航控制器的子项(这样可以轻松实现!)

  • 或者您可以考虑将您的splitviewcontroller作为根控制器,并将您的登录视图显示为顶部的模式显示。

  • 或......真的选项是开放的 - 这是C#加上UIKit的力量,灵活性和偶尔的怪癖


一方面注意:就个人而言,我发现一旦我开始构建更复杂的UI,我就会开始聚合演示文稿的职责。例如,显示了这一点:

  • N=25演示者中询问标签拥有视图以决定在何处显示新视图/ viewmodel
  • 在此opcode blog post中,CustomPresenter维护一个自定义的片段活动主机列表,这些主机已注册各种视图模型请求(当它们注册时以及它们随后对这些请求执行的操作完全取决于它们)

因为这只是C#,所以构建从一个范例(例如制表符)更改为另一个范例(例如splitView)并且这些UI被很好地封装的UI相当容易 - 它们应该照顾好自己。