我在网上看了一下,并没有找到一个可接受的解决方案来解决这个问题......
我正在寻找一个简单的代码模式:
Load a TabBarController object (with associated subview controllers) from a separate .xib file, instead of including and loading automatically from a default MainWindow.xib.
在XCode术语中,从新的iPad / iPhone项目开始作为“标签栏应用程序”,目标是解决以下问题:
-
创建项目
-
将MainBindow.xib中的TabBarController,TabBar,FirstViewController和SelectedSecondViewController移动到新的"TabBarController.xib"文件中
-
移动后,MainWindow.xib应仅包含:文件所有者,急救人员,应用程序代表,窗口
-
在TabBarController.xib中,File的Owner和First Responder分别设置为:UIApplication和UIResponder .
-
将主应用程序委托中的"didFinishLaunchingWithOptions"更改为以下内容:
去掉:
[self.window addSubview:tabBarController.view];
加:
UITabBarController *uiTab = [[UITabBarController alloc] initWithNibName:@"TabBarController" bundle:nil];
[self.window addSubview:uiTab.view];
通过这些更改,应用程序构建并运行,但是当TabBarController加载标签栏为“空”时 - 控制器中似乎没有任何内容 .
查看调试器时,“init”未正确初始化数据,或者.xib文件中的某些内容未正确设置 .
对此有什么正确的解决方案?我意识到还有其他方法可以做到这一点,是的,我让他们在其他应用程序中工作 .
我在找什么, is a specific solution using the default project, that can be used as a general pattern for setting up iOS code.
在此先感谢您的帮助
- js
2 回答
我想我知道你在找什么,因为我想要同样的东西 .
在界面构建器中创建新的空xib文件 .
从库中添加到xib
TabBarController
.在xib上的此选项卡栏控制器上编辑您需要的任何内容 .
当然,保存...
确定哪个视图控制器确实想要使用标签栏控制器创建该xib . 换句话说,谁是导致此标签栏控制器出现的视图控制器 . 我们称之为视图控制器
ParentViewController
在该视图控制器中,创建
IBOutlet
到TabBarController
.回到xib,将文件所有者的身份设置为
ParentViewController
,当然不要忘记将文件所有者中标签栏控制器的插座连接到xib中的标签栏控制器 . 保存xib,你准备好了 .当您想要显示该标签栏时,只需确定您想要的方式:模态,弹出或其他(不在导航控制器中,因为Apple不允许标签栏控制器位于导航控制器内) .
当您决定时,只需显示标签栏控制器插座,即可呈现任何其他视图控制器 . 例如:
假设您从“标签栏应用程序”模板开始,并将UITabBarController和关联的视图控制器移动到您描述的新笔尖...
在新的nib中,File的Owner应该设置为AppDelegate类 . 然后将File's Owner的插座“tabBarController”连接到UITabBarController .
然后在你的 - [application:didFinishLaunchingWithOptions:]中,不要删除这一行:
相反,在您的应用委托作为所有者之前,在此之前加载新的笔尖:
这将设置你的tabBarController属性(因为你在nib中 Build 了这个连接)然后你可以正常进行 . 你正在做的实际上是创建一个全新的UITabBarController,而不是从笔尖加载一个 . (嗯,好的,你加载了一会儿,但后来没有做任何有用的事情)
希望有所帮助 .