2009-11-11 101 views
3

我有一个根视图控制器,它在其viewDidLoad方法的索引0处插入子视图。为什么viewDidAppear没有被触发?

我想让子视图成为firstResponder,但只能做到这一点 - 从我的理解 - 在子视图的viewDidAppear方法。

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

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

的subviewcontroller具有XIB,subViewController.xib,在运行时显示正确。不过,subViewController的viewDidAppear不会被触发。

任何想法为什么发生这种情况?任何想法如何弥补这一点 - 除了手动调用viewDidAppear(这样做会导致失败成为firstResponder)?

感谢,

mbotta

回答

15

您必须将视图控制器放到导航堆栈上,以便委托方法被调用。将视图控制器的视图添加到子视图数组不会调用它们。你应该做的第一件事是阅读View Controller Programming Guide from Apple,因为这将以非标准的方式为你解决一些头疼的问题。

,而不是添加视图到你的根视图控制器子视图,这样做:

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

现在你的委托方法将被调用。如果您没有导航控制器作为您的根视图控制器,但是,这不起作用。

+0

谢谢!也就是说,事实上,我不打算在这个项目中使用导航控制器。我通读了你提到的编程指南(谢谢)昨天,只是为了确定,但我真的找不到任何东西来帮助我。 ...绝望。 – mbotta 2009-11-12 11:38:47

+0

我想我的观点是,你所要做的并不是明智的,因为你找不到解决方案。您可能有一个很好的主意,可以提供与标准不同的视图,但是,通常情况下,您可以更轻松地坚持Apple提供的导航堆栈或选项卡观点。也许如果你详细说明你想要做什么,那么SO上的人可以提出一些适合你的要求的不同而又适当的方法。最好的祝福。 – 2009-11-12 15:17:53

+0

好点。事实上,正如我将在稍后回答我自己的问题时所指出的那样,我选择放弃这个更简单的设计:实用程序模板,我相信它被称为(现在不在我的mac中)。 与该模板,没有根视图控制器打扰。有一个主要观点是翻页视图的代表。两者都得到适当的触发,这是我设计的重点。 感谢您将这个错误放在我的头上! – mbotta 2009-11-13 12:13:00

10

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

+0

真的吗?哎呀,这是不幸的:我应该已经发现,在我自己的文档中,当我调用viewDidAppear时,我自己并不知道如何成为FirstResponder。不过谢谢,我会尽力找到参考。 – mbotta 2009-11-11 22:30:25

+2

谢谢,保存我的时间很多:) – Ansari 2011-03-16 12:31:10

相关问题