我在使用 MvvmCross 框架的 MonoTouch 应用程序中有一个视图,我想显示模态 (NavigationController.PresentModalViewController)。
问问题
3926 次
1 回答
7
MvvmCross 从所有 ViewModel 只是“普通页面”的前提开始 - 所以在 iOS/MonoTouch 中,这意味着 UIViewControllers 使用 UINavigationController 呈现。
要摆脱这个前提——转向选项卡式显示、模式显示、拆分控制器、弹出窗口等——然后你可以在你的 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
{
// ....
}
于 2012-05-09T09:10:43.500 回答