viewWillAppear不会为属于UITabBarController的UIViewController触发,直到我切换标签

时间:2016-09-10 00:43:42

标签: ios uiviewcontroller uitabbarcontroller

在我的iOS应用中,我有一个UITabBarController,其viewControllers列表看起来像[vc1, vc2],分别属于MyVC1MyVC2类,两个子类UIViewControllerMyVC1覆盖viewWillAppear,覆盖的版本会打印一些东西,所以我知道它何时被调用。 (这是为了隔离我遇到的一个更大的问题,这是一个没有出现的观点。)

我的问题是,当应用首次启动并且vc1是所选标签时,不会打印任何内容,这意味着它的viewWillAppear未被调用。如果我切换标签然后返回vc1,会打印一些内容,因此在我从另一个标签切换回来之前,vc1' s viewWillAppear没有被调用。

有没有办法在应用启动时vc1拨打viewWillAppear,而无需切换标签?老实说,我很惊讶这不是默认行为。

4 个答案:

答案 0 :(得分:10)

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

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

  1. 在你覆盖viewWillAppear
  2. 的某个地方没有调用超级
  3. 将视图控制器的视图作为子视图添加到某个地方,而不将视图控制器添加为子视图控制器
  4. 您也可以尝试查看是否为您的UITabBarController调用了viewWillAppear,如果没有,是否为其父级或呈现视图控制器调用它?等等,直到找到持有的位置。

答案 1 :(得分:1)

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

  [super viewWillAppear:animated];

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

答案 2 :(得分:0)

在UITabBarController中的viewwillapear中确保具有super.viewWillAppear(animated),如以下代码

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

    }

答案 3 :(得分:0)

如果您具有Custom UITabBarController,请检查覆盖func viewWillAppear是否为超级调用

在自定义UITabBarController中

group_by