在啥情况下 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 会被调用?的主要内容,如果未能解决你的问题,请参考以下文章