2009-05-19 29 views
4

我想我找到了原因:IB中的文档信息窗口有一个警告:“'Selected Navigation Controller(Second)'将nib名称属性设置为'SecondView.nib' ,但是这个视图控制器不打算以这种方式设置其视图。“UITabBarController自动从另一个笔尖加载UINavigationController

无赖。


我已经建立了笔尖在Interface Builder中,在顶层和UINavigationController s的交换机具有UITabBarController

它工作正常,当一切都在一个单一的nib文件,但我想单独nib文件UINavigationController s。

与苹果的TabBar模板开始,如果我只是改变类SecondView来UINavigationController,这一切休息:

second nib

和我得到的是这样的:

// imgur has lost the image, sorry // 

是否有可能如果没有以编程方式设置所有内容,单独的文件为UINavigationController

我想TabBarController来处理加载和卸载笔尖。

+0

嘿,这里有一些个人照片而不是截图。你能解决吗? :) – 2012-12-10 01:54:30

回答

5

只需将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) 

您设置第一个视图控制器的笔尖在检查包含实际视图对象(因为你正尝试将它们分割成单独的文件笔尖文件,这是一件好事)。

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

完成。

1

我相信你正在寻找这样的东西。你会用你的第二个nib文件的名字替换“whatever”。

newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]]; 
+0

我想避免以编程方式加载,初始化和释放nibs。 UITabBarController会自动执行此操作(对于普通的UIViewControllers至少...) – Kornel 2009-05-19 15:59:35

5

我还没有尝试通过IB设置UINavigationController。我有多个屏幕,每个都存储在单独的xib中,并有一个扩展UIViewController的相应类。在applicationDidFinishLaunching中,我使用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创建视图,然后文件的所有者类设置为你的类(例如这里FirstViewController)和连接文件的所有者视图UIView的的看法。

1

首先,它看起来像你有你的UITabBarItem s 下的导航控制器而不是直接在UITabBarController下。这可能是你的问题的一部分。第二,当你在IB中添加一个UITabBarController并且点击你的顶级对象列表中的图标(你的第一个截图)时,属性检查器将允许你改变每个视图控制器的类型标签。如果你愿意,使用这个,你可以将它们全部更改为导航控制器。此外,由于您想从其他笔尖加载自定义视图和视图控制器,因此如果您查看属性检查器底部的“视图控制器”部分,则可以从项目中选择一个笔尖以加载视图。假设笔尖的“文件所有者”设置为UINavigationController子类,它应该都可以正常工作。

所有这些都没有大量的编码工作。如果您不能找到这些面板,请告诉我您是否需要屏幕截图。

+0

我无法直接在UITabBarController下移动UITabBarItems - 这会在IB中创建新的控制器。 我已经更正了UITabViews检查器中的控制器类型,并在IB中触发警告,说它不会工作:( – Kornel 2009-05-19 16:29:30

0

我发现了同样的警告。我已经将所有视图控制器保存在单独的xib文件中。我通过删除.nib名称并将其保留为空来删除它。