【问题标题】:Add navigationcontroller to detail view in splitview将导航控制器添加到拆分视图中的详细视图
【发布时间】:2011-07-08 13:39:59
【问题描述】:

我正在关注这个例子:http://doronkatz.com/ipad-programming-tutorial-hello-world。 这个例子很好用。

现在我想要拆分视图中的 3 个选项卡,并且每个选项卡都有一个新的导航控制器。 但我不知道如何实现它。 我去这个代码:

- (void)setDetailItem:(id)newDetailItem {
if (detailItem != newDetailItem) {
    [detailItem release];
    detailItem = [newDetailItem retain];

    // Update the view.
    navigationBar.topItem.title = detailItem;

    if ([detailItem isEqualToString:@"Test"]) {
        TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestView" bundle:nil];
        [self.navigationController pushViewController:testViewController animated:NO];
        [mapViewController release];

    }
    if ([detailItem isEqualToString:@"Test2"]) {

    }

}

if (popoverController != nil) {
    [popoverController dismissPopoverAnimated:YES];
}        

但我知道我实际上不必使用“pushviewcontroller”,我只想要一个从该点开始的新导航控制器,对于拆分视图中的每个选项卡也是如此。我怎样才能做到这一点?我知道这很基础,但我想不通。

谢谢。

【问题讨论】:

  • 在这里您可以使用简单的添加导航控制器并将子视图添加到基本视图来执行此操作。如果您发现任何问题,请告诉我。我很乐意为您解决这个问题。

标签: iphone objective-c ipad


【解决方案1】:

据我了解,您需要一个拆分视图控制器作为主控制器。左侧面板将选择一个项目,该项目的右侧详细视图将包含 3 个选项卡。每个选项卡都有一个导航控制器。应用商店遵循类似于详细视图的模式。

将控制器构造成树很重要。

  • root:拆分视图控制器
    • 列表视图:表格控制器(用于选择水果的 MasterViewController)
    • 详细视图:选项卡控制器(有关西瓜的所有信息)
      • tab1:导航控制器
        • 第 1 页:第一个选项卡根控制器(西瓜的历史)
      • tab2:导航控制器
        • 第 1 页:第一个选项卡根控制器(西瓜农场地图)
      • tab3:导航控制器
        • page3:第一个选项卡根控制器(西瓜食谱)

使用此模式,您可以在 viewDidLoad 上创建控制器结构,但随后在响应 setDetailItem 时更改页面 1、2、3 的内容 UINavigatorContoller 有一个 popToRootViewControllerAnimated 消息,可以为 3 个导航控制器中的每一个重置先前的导航控制器堆栈。当我开始学习 ios 开发时,我发现在代码中设置控制器层次结构比使用界面生成器更容易。掌握概念后,IB 会更快。您仍然可以为 page1、2、3 根视图控制器创建 IB nib 控制器。

好参考:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457

【讨论】:

    【解决方案2】:

    如果我理解正确,您有一个 UISplitViewController,并且您希望将三个 UINavigationControllers 作为详细视图。在这种情况下,如果在您的 UISplitViewController 类中实现以下将起作用:

        if ([detailItem isEqualToString:@"Test"]) {
    
            TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestView" bundle:nil];
    
            //since self.viewControllers is immutable, let's make our own temporary copy.
            NSMutableArray *tempArray = [self.viewControllers mutableCopy];
    
            //switcheroo with the new view controller
            [tempArray replaceObjectAtIndex:1 withObject:testViewController];
    
            // our new view controller is retained by the array, so let's release it
            [testViewController release];
    
            //set the new array to be displayed
            self.viewControllers = tempArray;
    
            //clean up - out mutableCopy returns a retained object
            [tempArray release];
    
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多