我有一个根视图控制器,它在viewDidLoad方法的索引0处插入一个子视图。
我试图让子视图成为firstResponder,但只能从我的理解 - 在子视图的viewDidAppear方法中执行此操作。
这是我添加到根视图控制器的viewDidLoad方法的代码行:
[self.view insertSubview: subViewController.view atIndex: 0];
subviewcontroller有一个xib,subViewController.xib,它在运行时正确显示。尽管如此,subViewController的viewDidAppear不会被触发。
知道为什么会这样吗?任何想法如何解决这个问题 - 除了手动调用viewDidAppear(这样做会导致无法成为firstResponder)?
感谢,
mbotta
答案 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方法中手动调用它。