如何在使用splitview和touch.dialog时使用导航栏

时间:2012-11-29 17:10:44

标签: xamarin.ios uinavigationbar uisplitviewcontroller monotouch.dialog mvvmcross

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

我认为它与UINavigation控制器缺失有关,但我无法弄清楚如何使用平板电脑演示器来实现它。

我的观点是使用Dialog构建的,我的演示者正在使用MvxBaseTouchViewPresenter。

有人能告诉我在使用splitview和对话框时如何使用导航栏吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我的用户界面并不是100%清楚你的描述 - 如果我的想法不对,那么一些图片可能会有所帮助。

然而......基本上我相信你可以在简单的MonoTouch中实现的任何UI,你也应该能够在MvvmCross中实现。

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

  • 请求导航时
  • 系统要求Container构造一个'View'(这是一个UIViewController - 而不是UIView)
  • 系统将加载的View传递给Presenter
  • Presenter可以显示此视图,但它想要 - 例如popup,splitview,导航子,模态等 - 还可以进行其他UI更改(动画,制表符开关等)
  • 当加载UIView本身时(在UIViewController ViewDidLoad中),MvxView基类加载要使用的View的ViewModel。

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

这只是C#代码 - 它只是在你的UI项目中 - 随意写它就像你'普通的MonoTouch'一样。

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

答案 1 :(得分:0)

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

我使用与github上的MVVMCross示例相同的设置。 我对SplitViewController进行了一些小改动:

  1. 我创建了两个名为_detailNav和_rootNav的UINavigationControllers。
  2. UINavigationController构造函数允许UIViewController设置RootViewController。在这里设置一个ViewController(在示例中:new EmptyViewController())。
  3. 更改名为SetPrimaryView和SetSecondaryView的两个方法,以便它使用UINavigationController来更改ViewControllers。
  4. 示例,更改此内容: this.ViewControllers = new UIViewController [] {controller,ViewControllers [1]};

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

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