2010-10-17 39 views
5

我有一个视图控制器,增加了其他子视图已经子类uiviewControllersViewDidAppear/viewWillAppear中没有被调用

所以它是这样的:

mainViewController 
     | 
    v---------v 
subVC1 subVC2 

而且,无论subVC1或subVC2有viewDidAppear/viewWillAppear中开火他们? 主视图控制器在应用程序委托中创建,并将其视图添加到窗口中。

这里是一个xcode项目,以显示我的问题:http://www.qfpost.com/download.do?get=92f03538907e72665ea794d98ff8392b

回答

5

我看了一下你的代码。 所以问题是viewWillAppear/viewDidAppear在视图被添加到窗口时被调用,而不是其子视图中的一个。 您可能想使用viewDidLoad。

+0

真的,我从来没有这样做过吗? – 2010-10-18 06:43:03

+0

在您的示例中,您将subVC2的视图添加到mainViewController的视图中。这不会调用viewDidAppear,因为当您将它添加到应用程序的“窗口”对象时,会调用此方法。在你的例子中你犯了另外两个错误:你用“init”方法初始化你的subVC2。我认为你想使用你在笔尖建立的那个。你需要使用initWithNibName:bundle:方法。最后一件事,当你添加子视图时,你可能想要释放subVC2,因为你没有对它进行任何引用。 – Julien 2010-10-18 09:29:41

+0

哦,我不是故意使用一个笔尖,但我不应该释放subVC2,因为我只将subvc2的视图传递给addsubview方法而不是整个viewcontroller?这也是关于iPhone上的VW/DA的,因为我发誓这件事以前没有发生过。 – 2010-10-18 16:42:13

1

首先,你确定你真正需要做你与UIViewControllers的这个层次做什么?为什么您的MainViewController无法处理您的subVC1subVC2负责的视图?

其次,当您编写代码从您的MainViewController调用它们时,您的viewWillAppear/viewDidAppear将被调用。如果不了解设计的其他内容,就不可能告诉你何时应该调用它们,但是如果在“主”视图可见时子控制器的视图始终可见,那么调用它们可能是有意义的从你的mainViewController的viewWillAppear/viewDidAppear方法。