未调用 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];
现在奇怪的是,视图已成功添加到子视图中,但由于某种原因,viewDidLoad
和 vieWillAppear
都没有被调用。然而,它成功地调用了创建共享单例的方法和init
方法。
我已仔细检查以确保:
UIViews
或 UIViewControllers
都不是 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 方法中调用?