viewDidLoad和ViewDidAppear未被调用

时间:2016-11-04 11:00:32

标签: ios objective-c uiview viewdidload viewdidappear

我正在使用xib文件创建UIViewController

我这样初始化:

 _sharedSingleton = [[SlipChangesViewController alloc] init];
            [[NSBundle mainBundle] loadNibNamed:@"SlipChangesViewController" owner:_sharedSingleton options:nil];

我将UIViewController的视图添加到另一个UIViewController的子视图中:

[self.view addSubview:slipChangesVC.view];

现在奇怪的是,视图已成功添加到子视图中,但由于某些原因,未调用viewDidLoadvieWillAppear。但是,它成功地调用了创建共享单例和init方法的方法。

我已仔细检查确认:

  • UIViewsUIViewControllers都不是
  • xib中的出口正确链接
  • 我正在呼叫[super viewDidLoad][super viewWillAppear]

我已经检查了stackOverflow上的各种线程并尝试了那些建议但没有成功。例如。致电[slipChangesVC view]

有谁知道为什么不会调用这两种方法?

3 个答案:

答案 0 :(得分:1)

这不是添加子视图控制器的正确方法。通过这种方式,视图所有者获得更改。从视图控制器和视图控制器分离的视图停止接收viewDidLoad和其他视图方法。

如果您想让它发挥作用,请查看已经回答的问题: add UIViewController in subview

答案 1 :(得分:1)

您正在现有视图上添加SlipChangesViewController视图。在那种情况下,viewDidLoad和viewWillAppear从未调用过。您需要为此

添加ViewController

尝试这个

- (void)addChildViewC:(UIViewController *)childViewC
{
    [self addChildViewController:childViewC];
    childViewC.view.frame = self.view.bounds;
    [self.view addSubview:childViewC.view];
    [childViewC didMoveToParentViewController:self];
}

答案 2 :(得分:0)

我永远不会让视图控制器成为单身人士。它不是单身人士。它被创造,破坏,再次创造,再次被摧毁。

我认为在视图控制器的生命周期中,viewDidLoad只被称为一次。因此,让你成为一个单身人士可能会导致各种各样的问题。