首页 文章

代码模式:直接从独立的.xib文件(而不是从MainWindow.xib)加载TabBarController对象

提问于
浏览
2

我在网上看了一下,并没有找到一个可接受的解决方案来解决这个问题......

我正在寻找一个简单的代码模式:

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 回答

  • 1

    我想我知道你在找什么,因为我想要同样的东西 .

    • 在界面构建器中创建新的空xib文件 .

    • 从库中添加到xib TabBarController .

    • 在xib上的此选项卡栏控制器上编辑您需要的任何内容 .

    • 当然,保存...

    确定哪个视图控制器确实想要使用标签栏控制器创建该xib . 换句话说,谁是导致此标签栏控制器出现的视图控制器 . 我们称之为视图控制器 ParentViewController

    在该视图控制器中,创建 IBOutletTabBarController .

    回到xib,将文件所有者的身份设置为 ParentViewController ,当然不要忘记将文件所有者中标签栏控制器的插座连接到xib中的标签栏控制器 . 保存xib,你准备好了 .

    当您想要显示该标签栏时,只需确定您想要的方式:模态,弹出或其他(不在导航控制器中,因为Apple不允许标签栏控制器位于导航控制器内) .

    当您决定时,只需显示标签栏控制器插座,即可呈现任何其他视图控制器 . 例如:

    [self presentModalViewController:self.myTabBarController animated:YES];
    
  • 2

    假设您从“标签栏应用程序”模板开始,并将UITabBarController和关联的视图控制器移动到您描述的新笔尖...

    在新的nib中,File的Owner应该设置为AppDelegate类 . 然后将File's Owner的插座“tabBarController”连接到UITabBarController .

    然后在你的 - [application:didFinishLaunchingWithOptions:]中,不要删除这一行:

    [self.window addSubview:tabBarController.view];
    

    相反,在您的应用委托作为所有者之前,在此之前加载新的笔尖:

    [[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil];
    

    这将设置你的tabBarController属性(因为你在nib中 Build 了这个连接)然后你可以正常进行 . 你正在做的实际上是创建一个全新的UITabBarController,而不是从笔尖加载一个 . (嗯,好的,你加载了一会儿,但后来没有做任何有用的事情)

    希望有所帮助 .

相关问题