首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用viewDidAppear

未调用viewDidAppear
EN

Stack Overflow用户
提问于 2012-07-18 08:42:24
回答 8查看 26.3K关注 0票数 9

在我的主UIViewController中,我添加了一个主屏幕视图控制器作为子视图:

代码语言:javascript
复制
   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,但仍然不起作用:

代码语言:javascript
复制
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];    
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-07-18 08:53:44

使用presentModalViewController、segues或pushViewController呈现视图控制器应该可以解决这个问题。

或者,如果出于某种原因,您希望在没有内置方法的情况下显示视图,则应在您自己的代码中手动调用这些方法。如下所示:

代码语言:javascript
复制
[self addChildViewController:controller];
BOOL animated = NO;
[controller viewWillAppear:animated];
[self.view insertSubview:controller.view atIndex:0];
[controller viewDidAppear:animated];
[controller didMoveToParentViewController:self];   
票数 -10
EN

Stack Overflow用户

发布于 2016-09-08 22:14:14

在我的例子中,没有调用viewDidAppear,因为我在viewWillAppear方法中犯了不必要的错误。

代码语言:javascript
复制
-(void)viewWillAppear:(BOOL)animated {
    [super viewdidAppear:animated]; // this prevented my viewDidAppear method to be called
}
票数 32
EN

Stack Overflow用户

发布于 2012-07-18 12:02:30

如果容器视图控制器执行以下操作(我确信您不会这样做),我可以重现该子控制器无法接收外观方法的问题的唯一方法:

代码语言:javascript
复制
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
{
    return NO;
}

也许您可以尝试显式启用此功能:

代码语言:javascript
复制
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
{
    return YES;
}

但是我的子视图控制器肯定得到了viewWillAppear调用(如果我显式地automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers,或者如果我完全省略了这一点。

更新:

好的,看看你最初问题下的评论,问题似乎是有问题的子控制器(B)本身就是一个容器视图控制器(这是完全可以接受的),它呈现了另一个子控制器(C)。这个控制器B自己的子控制器C正在被移除,您想知道为什么没有为容器控制器B获取viewWillAppearviewDidAppear。容器控制器在其子控制器被移除时不会获得这些外观方法(或者,更准确地说,因为容器应该移除子代,而不是移除自身的子代,所以当容器移除一个子代时,它不会接收外观方法)。

如果我误解了情况,请告诉我。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11532808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档