在我的主UIViewController中,我添加了一个主屏幕视图控制器作为子视图:
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:vc];
controller.navigationBarHidden = YES;
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
[self addChildViewController:controller];
[self.view insertSubview:controller.view atIndex:0];
[controller didMoveToParentViewController:self]; 问题是viewDidAppear和viewWillAppear只调用一次,就像viewDidLoad一样。为什么会这样呢?我该怎么做呢?
基本上,在vc中,我没有得到viewDidAppear或viewWillAppear。
我还尝试在没有导航控制器的情况下添加UIViewController,但仍然不起作用:
vc.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
[self addChildViewController:vc];
[self.view insertSubview:vc.view atIndex:0];
[vc didMoveToParentViewController:self]; 发布于 2012-07-18 08:53:44
使用presentModalViewController、segues或pushViewController呈现视图控制器应该可以解决这个问题。
或者,如果出于某种原因,您希望在没有内置方法的情况下显示视图,则应在您自己的代码中手动调用这些方法。如下所示:
[self addChildViewController:controller];
BOOL animated = NO;
[controller viewWillAppear:animated];
[self.view insertSubview:controller.view atIndex:0];
[controller viewDidAppear:animated];
[controller didMoveToParentViewController:self]; 发布于 2016-09-08 22:14:14
在我的例子中,没有调用viewDidAppear,因为我在viewWillAppear方法中犯了不必要的错误。
-(void)viewWillAppear:(BOOL)animated {
[super viewdidAppear:animated]; // this prevented my viewDidAppear method to be called
}发布于 2012-07-18 12:02:30
如果容器视图控制器执行以下操作(我确信您不会这样做),我可以重现该子控制器无法接收外观方法的问题的唯一方法:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
{
return NO;
}也许您可以尝试显式启用此功能:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
{
return YES;
}但是我的子视图控制器肯定得到了viewWillAppear调用(如果我显式地automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers,或者如果我完全省略了这一点。
更新:
好的,看看你最初问题下的评论,问题似乎是有问题的子控制器(B)本身就是一个容器视图控制器(这是完全可以接受的),它呈现了另一个子控制器(C)。这个控制器B自己的子控制器C正在被移除,您想知道为什么没有为容器控制器B获取viewWillAppear或viewDidAppear。容器控制器在其子控制器被移除时不会获得这些外观方法(或者,更准确地说,因为容器应该移除子代,而不是移除自身的子代,所以当容器移除一个子代时,它不会接收外观方法)。
如果我误解了情况,请告诉我。
https://stackoverflow.com/questions/11532808
复制相似问题