【问题标题】:viewDidLoad not being called by parent UITabBarControllerviewDidLoad 未被父 UITabBarController 调用
【发布时间】:2010-03-24 02:09:28
【问题描述】:

示例: 我创建了一组最小的文件来突出这里的问题:http://uploads.omega.org.uk/Foo3.zip

如果调用 viewDidLoad/viewInitWithNibName,则会显示一个消息框。没有显示消息框,因此没有调用方法。

详情: 我有一个应用程序正在尝试使用 UITabBarController 在多个视图之间切换。

使用界面构建器将视图链接到 UITabBarController(选择标签页,打开属性(Option-1),并填写 NIB 名称字段),因此“自动”显示,无需额外的代码隐藏让它们出现。

像这样加载的视图没有执行其 viewDidLoad 方法是预期的行为吗?如果没有,我做错了什么,我需要改变什么。

如果这是预期的行为,我可以考虑一些变通方法,但欢迎提出任何建议:

  1. 废弃 UITabBarController 并自己实现视图切换(使用 initWithNibName 和 add/insert/push/Subview)。
  2. 在 UITabBarController 自己的 viewDidLoad 方法中手动调用每个孩子的 viewDidLoad 方法。

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: objective-c iphone cocoa-touch uitabbarcontroller viewdidload


    【解决方案1】:

    好的,我已经设法解决了。

    将 NIB 链接到 TabBarController 是不够的 - 您还需要链接文件中的代码,即使您正确设置了文件所有者,NIB 也不会隐式链接它。

    打开 IB,然后选择相关页面。单击中间以选择视图控制器。输入子视图的 NIB 名称,然后转到最后一页(选项 4)。在“类标识”中,输入子视图 NIB 的代码隐藏文件的名称。

    现在一切正常。

    我上传了正确版本的示例代码:http://uploads.omega.org.uk/Foo3-Correct.zip

    【讨论】:

      【解决方案2】:

      您没有在项目中的任何地方实例化 ImportedView,因此它没有调用 initXXX 或 viewDidAnything。如果您将警报代码放在 -[FirstViewController viewDidLoad] 中,它将按预期触发。

      【讨论】:

      • 你是对的,它没有被实例化。有什么方法可以在使用 IB 将视图连接到视图控制器时自动实例化代码隐藏类,还是我需要在父 viewDidLoad/init 方法中添加和实例化子视图?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多