如何使用MvvmCross在iOS上展示模态视图?
在iOS的Xamarin Studio和MvvmCross NuGet版本4.2.2中,MvxModalSupportTouchViewPresenter
、MvxModalNavSupportTouchViewPresenter
或者IMvxModalTouchView
都不可用。
ViewModel需要知道一个特定的视图在iOS上是以模态视图的形式展示吗?
如何使用MvvmCross在iOS上展示模态视图?
在iOS的Xamarin Studio和MvvmCross NuGet版本4.2.2中,MvxModalSupportTouchViewPresenter
、MvxModalNavSupportTouchViewPresenter
或者IMvxModalTouchView
都不可用。
ViewModel需要知道一个特定的视图在iOS上是以模态视图的形式展示吗?
MvvmCross是一个强大的页面导航框架。使用ShowViewModel<AViewModel>
进行默认导航时,会使用“堆栈”隐喻:在Android上一个在另一个之上,在iOS上滑动叠加,使用平台上的<回退。
您可以通过采用IMvxModalIosView
接口标记来向ViewPresenter
指示给定视图为模态视图。
采用IMvxModalIosView
协议:
public partial class AView : MvxViewController, IMvxModalIosView
将var setup = new Setup(this, Window)
替换为:
var presenter = new MvxModalSupportIosViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();
无需更改。实际上,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;
[Register("ExampleModalView")]
[MvxModalPresentation(
ModalPresentationStyle = UIModalPresentationStyle.PageSheet,
ModalTransitionStyle = UIModalTransitionStyle.CoverVertical
)]
public class ExampleModalView : MvxViewController
{
public ExampleModalView() {
}
...
}
使用IMvxNavigationService服务启动模态框非常简单
await _navigationService.Navigate<ExampleModalViewModel>();