未调用 viewDidLoad 和 ViewDidAppear

Posted

技术标签:

【中文标题】未调用 viewDidLoad 和 ViewDidAppear【英文标题】:viewDidLoad and ViewDidAppear not being called 【发布时间】:2016-11-04 11:00:32 【问题描述】:

我有一个从 xib 文件创建的 UIViewController

我这样初始化它:

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

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

[self.view addSubview:slipChangesVC.view];

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

我已仔细检查以确保:

UIViewsUIViewControllers 都不是 nil xib 的出口已正确链接 我正在打电话给[super viewDidLoad][super viewWillAppear]

我检查了 *** 上的各种线程并尝试了那里的建议,但没有成功。例如。拨打[slipChangesVC view]

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

【问题讨论】:

也许看看这个***.com/a/32965187/2237587。答案的底部 【参考方案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】:

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

如果你想让它工作,请查看已经回答的问题: add UIViewController in subview

【讨论】:

【参考方案3】:

我永远不会让视图控制器成为单例。这不是单例。它被创建,销毁,再次创建,再次销毁。

我认为 viewDidLoad 在视图控制器的生命周期内只被调用一次。所以让你的单身人士可能会导致各种各样的问题。

【讨论】:

以上是关于未调用 viewDidLoad 和 ViewDidAppear的主要内容,如果未能解决你的问题,请参考以下文章

viewDidLoad() 中的 addSubView() 和 bringSubViewToFront() 不起作用

调用 ViewDidLoad 但未调用 ViewWillAppear

推送 viewController 时未调用 viewDidLoad

IBAction 方法未在 viewDidLoad 方法中调用?

Monotouch:OpenFlowSharp,未调用 ViewDidLoad 方法

UIScrollView 调整自身大小