Xamarin.ios 如何在MvvmCross中指定要作为模式推送的视图?
我在使用MvvmCross框架的MonoTouch应用程序中有一个视图,我希望以模态(NavigationController.PresentModalViewController)显示该视图。MvvmCross的前提是所有视图模型都只是“普通页面”——因此在iOS/MonoTouch中,这意味着UIViewController使用UINavigationController显示 要从这个前提转移到选项卡式显示、模式显示、拆分控制器、弹出窗口等,您可以在MonoTouch应用程序中调整演示者逻辑 演示者的工作是实施:Xamarin.ios 如何在MvvmCross中指定要作为模式推送的视图?,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我在使用MvvmCross框架的MonoTouch应用程序中有一个视图,我希望以模态(NavigationController.PresentModalViewController)显示该视图。MvvmCross的前提是所有视图模型都只是“普通页面”——因此在iOS/MonoTouch中,这意味着UIViewController使用UINavigationController显示 要从这个前提转移到选项卡式显示、模式显示、拆分控制器、弹出窗口等,您可以在MonoTouch应用程序中调整演示者逻辑
public interface IMvxTouchViewPresenter
{
void Show(MvxShowViewModelRequest view);
void Close(IMvxViewModel viewModel);
void CloseModalViewController();
void ClearBackStack();
bool PresentModalViewController(UIViewController controller, bool animated);
void NativeModalViewControllerDisappearedOnItsOwn();
}
应用程序使用的演示者在AppDelegate构造中选择-例如,请参见如何为iPhone和iPad构建不同的演示者
幸运的是,对于简单的模式支持,可用的标准演示者之一是 此演示者查看所呈现的视图是否具有
IMvxModalTouchView
标记界面-它测试视图是否为IMvxModalTouchView
。如果存在此界面,则对视图使用模态表示,而不是“正常导航”
要使用此选项,请将AppDelegate代码更改为:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
window = new UIWindow(UIScreen.MainScreen.Bounds);
// initialize app for single screen iPhone display
var presenter = new MvxModalSupportTouchViewPresenter(this, window);
var setup = new Setup(this, presenter);
setup.Initialize();
// start the app
var start = this.GetService<IMvxStartNavigation>();
start.Start();
window.MakeKeyAndVisible();
return true;
}
public override bool FinishedLaunching(UIApplication应用程序、NSDictionary选项)
{
窗口=新的UIWindow(UIScreen.MainScreen.Bounds);
//为单屏幕iPhone显示屏初始化应用程序
var presenter=新的MvxModalSupportTouchViewPresenter(此窗口);
var设置=新设置(此为演示者);
setup.Initialize();
//启动应用程序
var start=this.GetService();
start.start();
window.MakeKeyAndVisible();
返回true;
}
然后将标记界面添加到模式视图中:
公共类MyView:MvxBindingTouchViewController,IMvxModalTouchView
{
// ....
}
漂亮的斯图尔特。顺便说一下,这个框架很棒。这是一个大型项目的基础。很酷-如果你有一些小的聊天问题,请过来找我们-否则,使用SO也是完美的。对于任何大小合理的iPhone/iPad应用程序,我希望你在某个时候能够编写自己的演示者-尤其是iPad。
public class MyView : MvxBindingTouchViewController<MyViewModel>, IMvxModalTouchView
{
// ....
}