我在使用MvvmCross框架的MonoTouch应用程序中有一个视图,我想要显示Modal(NavigationController.PresentModalViewController)。
答案 0 :(得分:7)
MvvmCross的前提是所有ViewModel都只是“普通页面” - 所以在iOS / MonoTouch中,这意味着使用UINavigationController呈现UIViewControllers。
要摆脱这个前提 - 转向选项卡式显示,模态显示,分割控制器,弹出窗口等 - 然后您可以调整MonoTouch应用程序中的Presenter逻辑。
主持人的工作是实施:
public interface IMvxTouchViewPresenter
{
void Show(MvxShowViewModelRequest view);
void Close(IMvxViewModel viewModel);
void CloseModalViewController();
void ClearBackStack();
bool PresentModalViewController(UIViewController controller, bool animated);
void NativeModalViewControllerDisappearedOnItsOwn();
}
在AppDelegate构造中选择用于您的应用的演示者 - 例如了解TwitterSearch如何为iPhone和iPad构建不同的演示者。
幸运的是,对于简单的模态支持,可用的标准演示者之一是MvxModalSupportTouchViewPresenter.cs
此演示者会查看所呈现的视图是否具有IMvxModalTouchView
标记界面 - 它会测试view is 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 class MyView : MvxBindingTouchViewController<MyViewModel>, IMvxModalTouchView
{
// ....
}