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

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

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

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

【问题讨论】:

    标签: ios uiviewcontroller uitabbarcontroller


    【解决方案1】:

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

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

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

    您还可以尝试查看是否为您的 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)
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-05
      • 2015-03-20
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多