代码之家  ›  专栏  ›  技术社区  ›  Kornel

通过uitabarcontroller从另一个NIB自动加载uinavigationcontroller

  •  4
  • Kornel  · 技术社区  · 17 年前

    我想我找到了原因:ib中的文档信息窗口有一个警告: “选定的导航控制器(第二个)”的nib name属性设置为“second view.nib”,但此视图控制器不打算以这种方式设置其视图。

    真倒霉。


    我已经在接口生成器中构建了 UITabBarController 在顶层,并在 UINavigationController S.

    当一切都在同一个房间里时,它就可以正常工作。 nib 文件,但我想单独使用 笔尖 文件供 ui导航控制器 S.

    从Apple的Tabbar模板开始,如果我只是将secondView类更改为 ui导航控制器 ,一切都结束了:

    second nib

    我得到的只是:

    // imgur has lost the image, sorry //
    

    是否可以有单独的文件 ui导航控制器 没有编程设置一切?

    我想 TabBarController 装卸笔尖。

    5 回复  |  直到 13 年前
        1
  •  5
  •   Corey Floyd    17 年前

    只需将uinavigationController与FirstViewController交换即可。

    所以层次结构应该是这样的:

    Tab bar controller
    -----Tab bar
    -----Navigation Controller
    ----------First View Controller
    ---------------Navigation Item
    ----------Tab bar item (First)
    -----Navigation Controller
    ----------Second View Controller
    ---------------Navigation Item
    ----------Tab bar item (Second)
    

    您将检查器中第一个视图控制器的NIB设置为包含实际视图对象的NIB文件(因为您正试图将其拆分为单独的文件,这是一件好事)。

    您有一个选项卡,该选项卡有一个导航控制器,它将第一个视图控制器加载为其根视图。

    完成。

        2
  •  5
  •   stefanB    17 年前

    我没有尝试过通过ib设置uinavigationcontroller。我有多个屏幕,每个屏幕都存储在单独的xib中,并且有一个扩展uiviewcontroller的相应类。在ApplicationDidFinishing中,我使用XIB初始化uiviewControllers,然后手动创建uinavigationController,将导航控制器的视图添加到窗口,并将第一个视图推送到导航控制器。

    不确定这是否有帮助。

    - (void)applicationDidFinishLaunching:(UIApplication *)application {    
    
        navigationController = [[UINavigationController alloc] init];
    
        FirstViewController * viewController = [[FirstViewController alloc] 
                                               initWithNibName:@"FirstView"
                                                        bundle:nil];
        [navigationController pushViewController:viewController animated:NO];
        [viewController release];
        [window addSubview:navigationController.view];
        [window makeKeyAndVisible];
    }
    

    上面的firstviewcontroller扩展了uiviewcontroller,在ib中创建视图,然后将文件的owner类设置为类(例如,这里是firstviewcontroller),并将文件的owner视图连接到uiview的视图。

        3
  •  1
  •   Joe Cannatti    17 年前

    我相信你在找这样的东西。您将用第二个NIB文件的名称替换“whatever”。

    newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]];
    
        4
  •  1
  •   Marc W    17 年前

    首先,看起来你有 UITabBarItem S 在下面 导航控制器而不是直接位于 UITabBarController . 这可能是你问题的一部分。

    第二,当您添加 Uitababarcontroller(Uitababarcontroller) 在ib中,单击它在顶级对象列表中的图标(您的第一个屏幕截图),属性检查器将允许您更改每个选项卡的视图控制器类型。如果您愿意的话,您可以使用它将它们全部更改为导航控制器。此外,由于您希望从其他NIB加载自定义视图和视图控制器,如果您查看“属性检查器”底部的“视图控制器”部分,则可以从项目中选择一个NIB来加载视图。假设NIB的“文件所有者”设置为 UINavigationController 子类,应该一切正常。

    所有这些都没有大量的编码工作。如果你想要我所说的屏幕截图,请告诉我,以防你找不到这些面板。

        5
  •  0
  •   saurabh    15 年前

    我发现了同样的警告。我将所有视图控制器保存在单独的XIB文件中。我把它去掉了。笔尖的名字保持空白。

    推荐文章