如何在 MvvmCross 中指定要作为 Modal 推送的视图?

2024-03-18

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


MvvmCross 的前提是所有 ViewModel 都只是“普通页面”——因此在 iOS/MonoTouch 中,这意味着使用 UINavigationController 呈现 UIViewController。

要摆脱这个前提 - 转向选项卡式显示、模式显示、拆分控制器、弹出窗口等 - 那么您可以在 MonoTouch 应用程序中调整 Presenter 逻辑。

演示者的工作是实现:

public interface IMvxTouchViewPresenter
{
    void Show(MvxShowViewModelRequest view);
    void Close(IMvxViewModel viewModel);
    void CloseModalViewController();
    void ClearBackStack();
    bool PresentModalViewController(UIViewController controller, bool animated);
    void NativeModalViewControllerDisappearedOnItsOwn();
}

用于您的应用程序的演示者是在 AppDelegate 构造中选择的 - 例如看看如何推特搜索 https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20TwitterSearch/TwitterSearch.UI.Touch/AppDelegate.cs为 iPhone 和 iPad 构建不同的演示器。


幸运的是,对于简单的模态支持,可用的标准演示器之一是MvxModalSupportTouchViewPresenter.cs https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross/Touch/Views/Presenters/MvxModalSupportTouchViewPresenter.cs

该演示者查看所呈现的视图是否具有IMvxModalTouchView标记接口 - 它测试view is 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 class MyView : MvxBindingTouchViewController<MyViewModel>, IMvxModalTouchView
 {
      // ....
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MvvmCross 中指定要作为 Modal 推送的视图? 的相关文章

随机推荐