Xamarin.ios 如何在MvvmCross中指定要作为模式推送的视图?

Xamarin.ios 如何在MvvmCross中指定要作为模式推送的视图?,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我在使用MvvmCross框架的MonoTouch应用程序中有一个视图,我希望以模态(NavigationController.PresentModalViewController)显示该视图。MvvmCross的前提是所有视图模型都只是“普通页面”——因此在iOS/MonoTouch中,这意味着UIViewController使用UINavigationController显示 要从这个前提转移到选项卡式显示、模式显示、拆分控制器、弹出窗口等,您可以在MonoTouch应用程序中调整演示者逻辑

我在使用MvvmCross框架的MonoTouch应用程序中有一个视图,我希望以模态(NavigationController.PresentModalViewController)显示该视图。

MvvmCross的前提是所有视图模型都只是“普通页面”——因此在iOS/MonoTouch中,这意味着UIViewController使用UINavigationController显示

要从这个前提转移到选项卡式显示、模式显示、拆分控制器、弹出窗口等,您可以在MonoTouch应用程序中调整演示者逻辑

演示者的工作是实施:

public interface IMvxTouchViewPresenter
{
    void Show(MvxShowViewModelRequest view);
    void Close(IMvxViewModel viewModel);
    void CloseModalViewController();
    void ClearBackStack();
    bool PresentModalViewController(UIViewController controller, bool animated);
    void NativeModalViewControllerDisappearedOnItsOwn();
}
应用程序使用的演示者在AppDelegate构造中选择-例如,请参见如何为iPhone和iPad构建不同的演示者


幸运的是,对于简单的模式支持,可用的标准演示者之一是

此演示者查看所呈现的视图是否具有
IMvxModalTouchView
标记界面-它测试
视图是否为IMvxModalTouchView
。如果存在此界面,则对视图使用模态表示,而不是“正常导航”

要使用此选项,请将AppDelegate代码更改为:

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        window = new UIWindow(UIScreen.MainScreen.Bounds);

        // initialize app for single screen iPhone display
        var presenter = new MvxModalSupportTouchViewPresenter(this, window);
        var setup = new Setup(this, presenter);
        setup.Initialize();

        // start the app
        var start = this.GetService<IMvxStartNavigation>();
        start.Start();

        window.MakeKeyAndVisible();

        return true;
    } 
public override bool FinishedLaunching(UIApplication应用程序、NSDictionary选项)
{
窗口=新的UIWindow(UIScreen.MainScreen.Bounds);
//为单屏幕iPhone显示屏初始化应用程序
var presenter=新的MvxModalSupportTouchViewPresenter(此窗口);
var设置=新设置(此为演示者);
setup.Initialize();
//启动应用程序
var start=this.GetService();
start.start();
window.MakeKeyAndVisible();
返回true;
} 
然后将标记界面添加到模式视图中:

公共类MyView:MvxBindingTouchViewController,IMvxModalTouchView
{
// ....
}

漂亮的斯图尔特。顺便说一下,这个框架很棒。这是一个大型项目的基础。很酷-如果你有一些小的聊天问题,请过来找我们-否则,使用SO也是完美的。对于任何大小合理的iPhone/iPad应用程序,我希望你在某个时候能够编写自己的演示者-尤其是iPad。
 public class MyView : MvxBindingTouchViewController<MyViewModel>, IMvxModalTouchView
 {
      // ....
 }