xcode - 代码模式 : Loading TabBarController objects directly from independent . xib 文件(而不是来自 MainWindow.xib)

标签 xcode design-patterns ios xib tabbarcontroller

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

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

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

用 XCode 术语来说,从一个新的 iPad/iPhone 项目作为“标签栏应用程序”开始,目标是解决以下问题:

  • 创建项目
  • 将:TabBarController、TabBar、FirstViewController 和 SelectedSecondViewController 从 MainWindow.xib 移至新的“TabBarController.xib”文件
  • 移动后,MainWindow.xib 应仅包含:文件所有者、第一响应者、应用程序委托(delegate)、窗口
  • 在 TabBarController.xib 中,文件所有者和第一响应者分别设置为:UIApplication 和 UIResponder。
  • 将主应用程序委托(delegate)中的“didFinishLaunchingWithOptions”更改为以下内容:

删除:

     [self.window addSubview:tabBarController.view];

添加:

     UITabBarController *uiTab = [[UITabBarController alloc] initWithNibName:@"TabBarController" bundle:nil]; 
     [self.window addSubview:uiTab.view];

通过这些更改,应用程序将构建并运行,但是当 TabBarController 加载时,选项卡栏是“空的”—— Controller 中似乎没有任何内容。

在调试器中查看时,“init”未正确从数据初始化,或者 .xib 文件中的某些内容未正确设置。

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

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

预先感谢您的帮助

  • js

最佳答案

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

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

确定要从哪个 View Controller 创建带有选项卡栏 Controller 的 xib。换句话说,谁是 View Controller ,将导致此选项卡栏 Controller 出现。 我们将该 View Controller 称为 ParentViewController

在该 View Controller 中,创建一个 IBOutletTabBarController .

回到xib,将File's Owner的身份设为ParentViewController当然,不要忘记将文件所有者中的选项卡栏 Controller 的 socket 连接到 xib 中的选项卡栏 Controller 。 保存 xib,然后就可以开始了。

当您想要显示该选项卡栏时,只需决定要采用哪种方式:模态、弹出或其他方式(不在导航 Controller 内,因为 Apple 不允许选项卡栏 Controller 位于导航 Controller 内)。

当您决定时,只需以呈现任何其他 View Controller 的方式呈现您的选项卡栏 Controller 导出即可。例如:

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

关于xcode - 代码模式 : Loading TabBarController objects directly from independent . xib 文件(而不是来自 MainWindow.xib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102785/

相关文章:

objective-c - Storyboard导航

c++ - 具有多重继承和依赖父类的设计

Java - 同一类结构的多个访问者模式

带有二进制正文的 iOS 快速发布请求

ios - 当整个屏幕设置为 RTL 时,我们如何将 tableview 单元格的语义更改为 LTR?

objective-c - 如何在我的应用程序旁边显示 NSPanel/NSWindow?

objective-c - 将 sqlite 数据库保存在缓存目录而不是文档中

ios - 了解具有 self 属性的变异函数

json - 如何使用 dispatchQueue.main 在 Swift 中将值传递出闭包

oop - 关于开放/封闭主体的困惑