为什么viewDidAppear没有被触发?

时间:2009-11-11 22:24:01

标签: iphone cocoa-touch uikit

我有一个根视图控制器,它在viewDidLoad方法的索引0处插入一个子视图。

我试图让子视图成为firstResponder,但只能从我的理解 - 在子视图的viewDidAppear方法中执行此操作。

这是我添加到根视图控制器的viewDidLoad方法的代码行:

        [self.view insertSubview: subViewController.view atIndex: 0];

subviewcontroller有一个xib,subViewController.xib,它在运行时正确显示。尽管如此,subViewController的viewDidAppear不会被触发。

知道为什么会这样吗?任何想法如何解决这个问题 - 除了手动调用viewDidAppear(这样做会导致无法成为firstResponder)?

感谢,

mbotta

2 个答案:

答案 0 :(得分:15)

您必须将视图 controller 推送到导航堆栈,以便调用它的委托方法。将视图控制器的视图添加到子视图阵列将不会调用它们。你应该做的第一件事就是阅读View Controller Programming Guide from Apple,因为这样可以避免你以非标准的方式做这些令人头疼的事情。

不要将视图添加到根视图控制器子视图中,而是执行以下操作:

SubviewController *controller = [[SubviewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;

现在将调用您的委托方法。但是,如果您没有导航控制器作为根视图控制器,则无法使用。

答案 1 :(得分:10)

如果我没记错的话(抱歉现在无法在文档中找到该位置)-viewDidAppear不会调用子视图。您必须在父视图控制器的-viewDidAppear方法中手动调用它。