2

SplitView 的问题是导航栏……它不见了。我使用平板电脑演示器,就像在 MVVMCross 示例中一样。尝试添加导航栏项目时,例如 CustomerManagement 示例中所示,它不会显示。

我认为这与 UINavigation 控制器丢失有关,但我不知道如何使用平板电脑演示器来实现它。

我的视图是使用 Dialog 构建的,我的演示者使用的是 MvxBaseTouchViewPresenter。

谁能告诉我在使用拆分视图和对话框时如何使用导航栏?

提前致谢!

4

2 回答 2

0

从您的描述中,我对您的 UI 不是 100% 清楚 - 如果我的想法有误,那么一些图片可能会有所帮助。

但是...基本上我相信您可以在纯 MonoTouch 中实现的任何 UI,您也应该能够在 MvvmCross 中实现。

看起来你已经解决了很多这个问题,但只是回顾一下:

  • 请求导航时
  • 系统要求容器构造一个“视图”(这是一个 UIViewController - 不是 UIView)
  • 系统将加载的 View 传递给 Presenter
  • Presenter 可以显示这个视图,但它想要显示 - 例如弹出窗口、拆分视图、导航子视图、模式等 - 并且还可以进行其他 UI 更改(动画、选项卡切换等)
  • 当 UIView 本身被加载(在 UIViewController ViewDidLoad 中)时,MvxView 基类加载 ViewModel 以供 View 使用。

在您的示例中,听起来您可能想要专门化您的拆分视图之一,以便它包含一个 UINavigationController - 然后您希望您的 Presenter 将您的新视图传递给该 UINavigationController 以进行推送。

这只是 C# 代码——它只是在你的 UI 项目中——你可以像“普通的 MonoTouch”一样随意编写它。

“高级”演示者的一个示例是会议示例 - 了解它如何将显示操作委托给选项卡栏 - https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20CirriousConference/Cirrious。 Conference.UI.Touch/ConferencePresenter.cs

于 2012-11-30T09:04:20.400 回答
0

我设法回答了我自己的问题。如果我的方法有误,请纠正我!

我使用与 github 上的 MVVMCross 示例中相同的设置。我对 SplitViewController 做了一个小改动:

  1. 我创建了两个 UINavigationController,分别称为 _detailNav 和 _rootNav。
  2. UINavigationController 构造函数允许将 UIViewController 设置为 RootViewController。在此处设置一个 ViewController(在示例中:new EmptyViewController())。
  3. 更改名为 SetPrimaryView 和 SetSecondaryView 的两个方法,因此它使用 UINavigationController 更改 ViewControllers。

例如,改变这个: this.ViewControllers = new UIViewController[] { controller, ViewControllers[1] };

为此:_detailNav.PushViewController(controller, true);

现在 _detailNav(一个 UINavigationController)用于更改视图,而不是在 SplitView 中设置新的 ViewControllers 数组。

于 2012-11-30T09:05:34.630 回答