如何在MvvmCross中呈现iOS模态视图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MvvmCross中呈现iOS模态视图相关的知识,希望对你有一定的参考价值。
如何使用MvvmCross在ios上呈现模态视图?
在iOS上使用Xamarin Studio和MvvmCross NuGet版本4.2.2,甚至没有MvxModalSupportTouchViewPresenter
,MvxModalNavSupportTouchViewPresenter
或IMvxModalTouchView
。
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模态视图的主要内容,如果未能解决你的问题,请参考以下文章