我可以使用UINavigationController作为UISplitViewController的详细视图吗?

时间:2010-09-21 17:07:08

标签: cocoa-touch ipad

我遇到了一个iPad应用程序的问题,我想在UISplitView的两个视图中都有UINavigationControllers。我在这里看了其他类似的问题,但大多数链接到在线教程并没有完全解决问题。这是一个2分钟的演练来重新创建我遇到的问题:

  1. 在XCode中创建一个新项目,从基于拆分视图的应用程序模板开始。
  2. 将以下NSLog语句添加为DetailViewController的willHideViewController方法中的第一行:

    NSLog(@“toolbar:%@”,工具栏);

  3. 如果您现在运行该应用程序,日志将显示DetailViewController的工具栏是否还活着。现在...

    1. 打开MainWindow.xib并展开SplitViewController。
    2. 从DetailViewController顶部的库中拖动导航控制器。
    3. 展开新的Navigation Controller并将UIViewController的类更改为DetailViewController。
    4. 从SplitViewController按住Ctrl键拖动到DetailViewController并将其指定为委托。
    5. 保存MainWindow.xib并再次运行该应用程序。
    6. 此时,详细视图有一个导航栏和一个空工具栏。如果查看日志,则应发现工具栏为空。为什么是这样?我在Interface Builder中错过了某种连接吗?导航栏是出于某种原因的问题吗?

      http://www.cimgf.com/2010/05/24/fixing-the-uisplitviewcontroller-template/的教程不同,我想同时保留导航栏和工具栏(最好是工具栏在顶部,在纵向时,在横向时不可见),这样我仍然有一个当iPad处于纵向时,功能“返回”按钮。

      有没有人有解决这个问题的建议?具有这种设置的示例项目将是理想的。

2 个答案:

答案 0 :(得分:1)

您当然可以在拆分视图控制器的详细视图上使用导航控制器。事实上,iPad Settings应用程序使用这种方法。获得此设置的最佳方法可能是在Xcode 4.x中创建一个新项目并选择“Master-Detail Application”模板。它将生成一个带有2个导航控制器的分割视图控制器,一个用于左视图,另一个用于右视图。

对于你的工具栏问题,为了简单起见,我会在底部放置一个工具栏。您仍然可以在顶部导航栏上放置条形按钮项,但您只能将它们放在左侧,中间或右侧。如果顶部栏上需要大量项目,则一种方法是在详细视图中添加工具栏,并在详细视图类的viewWillAppear事件中隐藏导航栏。

以下是如何隐藏导航栏并显示工具栏的示例:

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.toolbarHidden = NO;
    self.navigationController.navigationBarHidden = YES;
}

答案 1 :(得分:0)

我发现内置的UISplitViewController在尝试将其与大多数其他内置视图控制器子类组合时表现不佳。 Matt Gemmell的MGSplitViewController更加灵活,并且对我来说效果很好,尽管有一些奇怪的故障(尽管提供的源代码至少可以修复)。