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

Swi*_*ect 3 modal-dialog xamarin.ios mvvmcross xamarin

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

使用Xamarin工作室在iOS和MvvmCross的NuGet版本4.2.2,没有的MvxModalSupportTouchViewPresenter,MvxModalNavSupportTouchViewPresenter或者IMvxModalTouchView甚至是可用的.

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

Swi*_*ect 11

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

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

在视图级别

采用IMvxModalIosView协议:

public partial class AView : MvxViewController, IMvxModalIosView
Run Code Online (Sandbox Code Playgroud)

在AppDelegate级别

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

var presenter = new MvxModalSupportIosViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();
Run Code Online (Sandbox Code Playgroud)

在ViewModel级别

无需更改.ViewModel实际上并未意识到模态表示.调用:

ShowViewModel<AViewModel> // May be modal on certain platforms
Run Code Online (Sandbox Code Playgroud)

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

public ICommand BackCommand {
    get { return new MvxCommand(() => Close(this)); }
}
Run Code Online (Sandbox Code Playgroud)

注意:在MvvmCross 4.2.2中,Touch已经重命名为iOS,IMvxModalTouchView现在也是IMvxModalIosView.新的using是:

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