如何在MvvmCross中呈现iOS模态视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MvvmCross中呈现iOS模态视图相关的知识,希望对你有一定的参考价值。

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

在iOS上使用Xamarin Studio和MvvmCross NuGet版本4.2.2,甚至没有MvxModalSupportTouchViewPresenterMvxModalNavSupportTouchViewPresenterIMvxModalTouchView

ViewModel甚至需要知道特定视图在iOS上作为模态视图呈现的事实吗?

答案

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

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

At the View Level

采用IMvxModalIosView协议:

public partial class AView : MvxViewController, IMvxModalIosView

At the AppDelegate Level

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

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

At the ViewModel Level

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

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

要关闭页面并返回上一页,无论您的演示风格如何,请在该ViewModel上使用Close(this)。这将关闭模态对话框,或弹出推送视图。完整的,可绑定的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;
另一答案

使用MvvmCross 5.5.2所有我必须得到一个模态是将以下MvxModalPresentation属性添加到我的iOS视图:

[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

以上是关于如何在MvvmCross中呈现iOS模态视图的主要内容,如果未能解决你的问题,请参考以下文章

ios 8 更改呈现/模态视图控制器的大小

如何使用 iOS 7 自定义转换在顶部呈现半模态视图控制器

iOS8 - 呈现模态视图会删除子视图

显示模态视图 - IOS

ios:应用程序试图在目标上呈现一个 nil 模态视图控制器

横向 IOS 应用程序在呈现模态视图控制器时抛出异常