【问题标题】: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 已经加载

【问题讨论】:

  • 如何加载该视图?
  • viewDidLoad 即使在我调用 [vc view] 之后也没有被调用
  • viewDidLoad 被 viewcontroller 调用,并且在 view 的生命周期中只调用一次

标签: objective-c xcode4.5


【解决方案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 事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2022-01-20
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多