2

我在网上四处寻找,并没有找到解决这个问题的可接受的方法......

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

从单独的 .xib 文件中加载 TabBarController 对象(带有关联的子视图控制器),而不是从默认的 MainWindow.xib 中自动包含和加载。

在 XCode 术语中,从一个新的 iPad/iPhone 项目作为“Tab Bar Application”开始,目标是解决以下问题:

  • 创建项目
  • 将 MainWindow.xib 中的 TabBarController、TabBar、FirstViewController 和 SelectedSecondViewController 移动到新的“TabBarController.xib”文件中
  • 移动后,MainWindow.xib 应该只包含:File's Owner、First Responder、App Delegate、Window
  • 在 TabBarController.xib 中,File's 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 文件中的某些内容没有正确设置。

什么是正确的解决方案?我意识到还有其他方法可以做到这一点,是的,我让它们在其他应用程序中工作。

然而,我正在寻找的是使用默认项目的特定解决方案,它可以用作设置 iOS 代码的一般模式。

提前感谢您的帮助

  • js
4

2 回答 2

2

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

  1. 在界面生成器中创建新的空 xib 文件。
  2. TabBarController从库中添加到 xib 。
  3. 在 xib 上的此选项卡栏控制器上编辑您需要的任何内容。
  4. 当然,省...

确定要从哪个视图控制器创建带有标签栏控制器的 xib。换句话说,谁是会导致这个标签栏控制器出现的视图控制器。让我们称之为视图控制器ParentViewController

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

回到 xib,将文件所有者的身份设置为ParentViewController,当然不要忘记将文件所有者中的选项卡栏控制器的出口连接到 xib 中的选项卡栏控制器。保存 xib,您就可以开始了。

当您想要显示该标签栏时,只需决定您要以哪种方式进行操作:模态、弹出或其他方式(不在导航控制器内,因为 Apple 不允许标签栏控制器在导航控制器内)。

当您决定时,只需以呈现任何其他视图控制器的方式呈现您的标签栏控制器出口。例如:

[self presentModalViewController:self.myTabBarController animated:YES];
于 2011-01-18T08:24:22.103 回答
1

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

在您的新笔尖中,文件的所有者应设置为您的 AppDelegate 类。然后将File's Owner的出口“tabBarController”连接到UITabBarController。

然后在您的 -[application:didFinishLaunchingWithOptions:] 中,不要删除此行:

[self.window addSubview:tabBarController.view];

相反,在此之前加载新的 nib,并将您的应用程序委托作为所有者:

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

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

希望有帮助。

于 2010-11-05T04:25:21.157 回答