viewDidLoad没有被父UITabBarController调用

时间:2010-03-24 02:09:29

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

样品: 我创建了一组最小的文件,突出显示了这个问题:http://uploads.omega.org.uk/Foo3.zip

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

详细说明: 我有一个试图使用UITabBarController在多个视图之间切换的应用程序。

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

这样加载的视图是否有意执行viewDidLoad方法?如果没有,我怎么做错了,我需要改变什么。

如果是预期行为,我可以考虑一些解决方法,但任何建议都值得赞赏:

  1. 废弃UITabBarController并实现自己的视图切换(使用initWithNibName并添加/ insert / push / Subview)。
  2. 在UITabBarController自己的viewDidLoad方法中手动调用每个子视图的viewDidLoad方法。
  3. 提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

好的,我已经设法解决了这个问题。

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

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

现在一切都会很好用。

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

答案 1 :(得分:0)

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