【问题标题】:How to present an iOS Modal View in MvvmCross如何在 MvvmCross 中呈现 iOS 模态视图
【发布时间】:2017-12-19 04:12:30
【问题描述】:

如何使用 MvvmCross 在 iOS 上呈现模态视图?

在 iOS 上使用 Xamarin Studio 和 MvvmCross NuGet 4.2.2 版,MvxModalSupportTouchViewPresenterMvxModalNavSupportTouchViewPresenterIMvxModalTouchView 甚至都不可用。

ViewModel 是否甚至需要知道特定视图在 iOS 上显示为模态视图这一事实?

【问题讨论】:

    标签: xamarin xamarin.ios modal-dialog mvvmcross


    【解决方案1】:

    MvvmCross 是一个强大的页面导航框架。使用 ShowViewModel<AViewModel> 的默认导航将使用 stack 隐喻:在 Android 上一个在另一个之上,在 iOS 上相互滑动,并在任一平台上使用 返回.

    您可以通过采用IMvxModalIosView 以界面标记的形式给出提示,告诉ViewPresenter 给定视图是模态的。

    在视图级别

    采用IMvxModalIosView 协议:

    public partial class AView : MvxViewController, IMvxModalIosView
    

    在 AppDelegate 级别

    var setup = new Setup(this, Window) 替换为:

    var presenter = new MvxModalSupportIosViewPresenter(this, Window);
    var setup = new Setup(this, presenter);
    setup.Initialize();
    

    在 ViewModel 级别

    无需更改。 ViewModel 实际上并没有意识到模态表示。调用:

    ShowViewModel<AViewModel> // May be modal on certain platforms
    

    要关闭页面并返回上一个页面,无论您的演示风格如何,请在该 ViewModel 上使用 Close(this)。这将关闭一个模态对话框,或pop一个推送视图。一个完整的、可绑定的ICommand 可能如下所示:

    public ICommand BackCommand {
        get { return new MvxCommand(() => Close(this)); }
    }
    

    注意:在 MvvmCross 4.2.2 中,Touch 已重命名为 iOS,所以 IMvxModalTouchView 现在是 IMvxModalIosView。新的using 是:

    • using MvvmCross.iOS.Platform;
    • using MvvmCross.iOS.Views.Presenters;

    【讨论】:

    • 有人可以举个例子吗?我正在尝试使用 UIView 执行此操作,但它没有显示为模式。
    【解决方案2】:

    使用 MvvmCross 5.5.2 我只需要在我的 iOS 视图中添加以下 MvxModalPresentation 属性即可:

    [Register("ExampleModalView")]
        [MvxModalPresentation(
            ModalPresentationStyle = UIModalPresentationStyle.PageSheet,
            ModalTransitionStyle = UIModalTransitionStyle.CoverVertical     
        )]
        public class ExampleModalView : MvxViewController
        {
            public ExampleModalView() {
    
            }
         ...
    }
    

    使用 IMvxNavigationService 服务启动模式很简单

            await _navigationService.Navigate<ExampleModalViewModel>();
    

    ExampleModalViewModel 只需是从 MvxViewModel 继承的普通 MvvmCross 视图模型。

    对此有用的参考是 iOS 游乐场项目中的 ModalView.cs:https://github.com/MvvmCross/MvvmCross/blob/develop/TestProjects/Playground/Playground.iOS/Views/ModalView.cs#L12

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多