为什么viewDidAppear没有被触发?

mbo*_*tta 3 iphone cocoa-touch uikit

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

我试图让子视图成为firstResponder,但只能这样做 - 从我的理解 - 在子视图的viewDidAppear方法中.

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

        [self.view insertSubview: subViewController.view atIndex: 0];
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,

mbotta

Mat*_*ong 15

您必须将视图控制器推送到导航堆栈,以便调用它的委托方法.将视图控制器的视图添加到子视图阵列将不会调用它们.您应该做的第一件事是阅读AppleView Controller Programming Guide,因为这样可以避免您以非标准方式执行此操作时遇到的一些麻烦.

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

SubviewController *controller = [[SubviewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;
Run Code Online (Sandbox Code Playgroud)

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


Vla*_*mir 10

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