如何使用MvvmCross在iOS上呈现模态视图?
在iOS上使用Xamarin Studio和MvvmCross NuGet版本4.2.2,MvxModalSupportTouchViewPresenter
,MvxModalNavSupportTouchViewPresenter
或IMvxModalTouchView
都不可用。
ViewModel甚至需要知道特定视图在iOS上呈现为模态视图的事实吗?
答案 0 :(得分:11)
MvvmCross是一个强大的页面导航框架。使用ShowViewModel<AViewModel>
的默认导航将使用堆栈比喻:一个在Android上的另一个,在iOS上相互滑动,并在任一平台上使用&lt; 回去。
您可以通过采用ViewPresenter
以接口标记的形式给出提示,告诉IMvxModalIosView
给定视图是模态的。
采用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中,触摸已重命名为 iOS ,因此IMvxModalTouchView
现在为{{1} }。新的IMvxModalIosView
是:
using
using MvvmCross.iOS.Platform;
答案 1 :(得分:2)
使用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