在我切换选项卡之前,viewWillAppear 不会为属于 UITabBarController 的 UIViewController 触发

Posted

技术标签:

【中文标题】在我切换选项卡之前,viewWillAppear 不会为属于 UITabBarController 的 UIViewController 触发【英文标题】:viewWillAppear not firing for UIViewController that belongs to UITabBarController until I switch tabs 【发布时间】:2016-09-10 00:43:41 【问题描述】:

在我的 ios 应用程序中,我有一个 UITabBarController,它的 viewControllers 列表看起来像 [vc1, vc2],它们分别属于 MyVC1MyVC2 类,它们都是 UIViewController 的子类。 MyVC1 覆盖 viewWillAppear,覆盖的版本会打印一些东西,所以我知道它什么时候被调用。 (这是为了隔离我遇到的一个更大的问题,即视图没有出现。)

我的问题是,当应用程序第一次启动并且vc1 是选定的选项卡时,没有打印任何内容,这意味着它的viewWillAppear 没有被调用。如果我切换选项卡然后返回到vc1,则确实会打印一些内容,因此在我从另一个选项卡切换回它之前不会调用vc1viewWillAppear

有什么方法可以让vc1 在应用程序启动后立即调用viewWillAppear,而无需切换标签?老实说,我很惊讶这不是默认行为。

【问题讨论】:

【参考方案1】:

我刚刚在 Xcode 中创建了一个新的测试应用程序,在 Main.storyboard 中只有一个 UITabViewController(及其两个子视图控制器),当我为第一个孩子覆盖 viewWillAppear 时,每次都会打印我的“视图将出现”日志(包括在应用启动时)。

以下是一些可能导致 viewWillAppear 无法被调用的情况:

    在覆盖 viewWillAppear 的地方没有调用 super 在某处添加视图控制器的视图作为子视图,而不将视图控制器添加为子视图控制器

您还可以尝试查看是否为您的 UITabBarController 调用 viewWillAppear,如果没有,是为其父级或呈现视图控制器调用它吗?以此类推,直到您找到滞留的位置。

【讨论】:

谢谢,我覆盖了UITabBarControllerviewWillAppear 而没有在里面调用super.viewWillAppear。愚蠢的错误...... 我很欣赏这个答案。这是一件非常小的事情,通常我们会错过它。它节省了很多时间。谢谢【参考方案2】:

如果你有自定义 UITabBarController,检查 override func viewWillAppear is call super

在自定义UITabBarController中

override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated) // this line need
    

【讨论】:

哦,我看到评论了。【参考方案3】:

在 vc1 的 viewWillAppear 方法中使用以下行:

  [super viewWillAppear:animated];

接下来,UITabBarController 必须是您的初始控制器。

【讨论】:

抱歉,这没有帮助。在我从另一个选项卡切换到 vc1 之前,它仍然没有被调用。 你能贴一张你的故事板的截图吗? 感谢您的帮助。我的UITabBarController 中缺少对 super 的调用。 如果 UITabBarController 不是我的初始控制器,我该怎么办?【参考方案4】:

在 viewwillapear 中的 UITabBarController 中使 shure 有 super.viewWillAppear(animated) 像下面的代码

override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)

    

【讨论】:

以上是关于在我切换选项卡之前,viewWillAppear 不会为属于 UITabBarController 的 UIViewController 触发的主要内容,如果未能解决你的问题,请参考以下文章

在选项卡之间切换时 UITableView 不更新

如何在选项卡栏控制器中更新选项卡上的视图

有没有办法在 JQuery 中切换选项卡?

在切换到 UITabbarController 中的不同选项卡之前关闭当前选项卡上的推送视图控制器

引导选项卡单击后不显示内容

以角度切换选项卡时保持选项卡状态