在啥情况下 viewWillAppear 会被调用?

Posted

技术标签:

【中文标题】在啥情况下 viewWillAppear 会被调用?【英文标题】:In what cases viewWillAppear be called?在什么情况下 viewWillAppear 会被调用? 【发布时间】:2013-07-17 04:36:41 【问题描述】:

正常的答案是,视图何时出现。

假设我有一个 UIViewController。我们称它为 vc。

假设我想让 vc 控制一个视图。

所以我做 vc.view = controlledView;

我希望每次受控视图即将出现然后 [vc viewWillAppear] 将被调用。

没有。

怎么了?

即使在我这样做之后也不会调用 viewDidLoad

[vc view]

从技术上讲,vc.view 已经加载

【问题讨论】:

***.com/questions/7386333/… 如何加载该视图? viewDidLoad 即使在我调用 [vc view] 之后也没有被调用 viewDidLoad 被 viewcontroller 调用,并且在 view 的生命周期中只调用一次 【参考方案1】:

如果您在任何其他文件中调用 viewWillAppear ,并且使用其他 View 实例,那么它将永远不会调用。

viewWillAppear 方法在每次进入该视图时调用,如果你离开它然后再次来或回来,它会再次调用。

请务必使用“超级”关键字作为。 WillAppear 方法中的 [super viewWillAppear]。

【讨论】:

很好的答案 Mohit bhai【参考方案2】:

根据docs

在接收者的视图即将添加之前调用该方法 到视图层次结构并在配置任何动画之前 显示视图。您可以覆盖此方法以执行自定义任务 与显示视图相关联。

【讨论】:

请注意,仅仅因为视图完全在屏幕外或被覆盖,viewWillAppear 在视图“出现”时不会被调用,不像其他一些答案所暗示的那样,只有当它实际添加到视图中时层次结构【参考方案3】:

viewWillAppear 总是在你的视图即将出现时被调用,正如名字本身所暗示的那样。

如果视图控制器由弹出框内的视图控制器呈现,则在呈现的控制器关闭后,不会在呈现的视图控制器上调用此方法。

视图控制器的生命周期是这样的:

当一个viewcontroller被分配和加载时,loadView被调用然后viewDidLoad被调用。您可以在图像中看到整个流程。

参考这张图片

注意:此图片取自this answer

【讨论】:

不,不是。这是正常的。但是,如果您将控制器视图更改为其他内容,则不会调用它。控制器不观察视图。【参考方案4】:

正确答案如下。

您是否将子 viewController 添加为父子视图控制器的子级。

viewWillAppear 只会被父视图控制器(顶部屏幕视图控制器)调用,除非另一个 viewController 被声明为子视图。

然后 parentViewController 将传递 viewWillAppear 事件。

【讨论】:

以上是关于在啥情况下 viewWillAppear 会被调用?的主要内容,如果未能解决你的问题,请参考以下文章

oracle表在啥情况下会被锁住

在啥情况下调用__rmul__?

在啥情况下调用来自父类的多个元类?

Android:在啥情况下出现对话框会导致 onPause() 被调用?

java里静态方法在啥情况下使用,好处是啥

C#里类型初始化器和构造方法有啥区别 他们分别在啥情况下用?