【问题标题】:viewDidDisappear of child view controllers not called when tap on UITabBar点击 UITabBar 时未调用子视图控制器的 viewDidDisappear
【发布时间】:2015-12-09 04:48:52
【问题描述】:

我有一个附有UITabBarController 和一些UINavigationViewControllers 的应用程序。假设在UITabBarController 的第一个选项卡上,用户导航到视图控制器 A,然后是 B,然后是 C,因此创建了一个堆栈 UINavigationController:A -> B -> C

我需要在 A、B 和 C 的 viewDidDisappear: 中做一些事情。如果用户点击后退按钮从 C -> B -> A 转到,则调用 B 和 C 的 viewDidDisappear:。但是如果用户点击UITabBarController中的第一个UITabBar,他们会直接从C -> A开始,并且只调用C的viewDidDisappear:,跳过B。

如果我使用我的自定义UITabBarController 子类并在tabBarController:shouldSelectViewController: 中返回NO,这种行为将不再存在,但我不想这样做,用户将不得不多次按下返回按钮才能去到根视图控制器。有什么办法可以解决这个问题,但要保持UITabBarController 的行为?

【问题讨论】:

  • 您必须重新排列您的代码,使其不依赖于viewDidDisappear。该方法未被可靠地调用(即在您可能期望的每种情况下调用),这只是一个示例。顺便说一句,没有在 B 上调用它的原因是因为当您推送 C 时,B 的视图不在层次结构中。如果您自己弹出到根控制器,您会看到相同的行为。

标签: ios objective-c uinavigationcontroller uitabbarcontroller


【解决方案1】:

确保将底部栏保持为无(在视图控制器 B 和 C 中),如下所示。 这将从这些视图控制器中隐藏底部栏,并且用户将无法直接从 Viewcontroller C 导航到 Viewcontroller A。 用户需要使用后退按钮导航从 C 转到视图控制器 A。

这将解决您调用 viewDidDisappear 的问题。

【讨论】:

  • 这正是不想要的答案。 Quote: ...这种行为将不复存在,但我不想这样做,用户将不得不多次按下返回按钮才能转到根视图控制器。
  • viewDidDisappear 方法的基本含义是当视图消失时调用。如果您不显示视图,您如何期望 ViewDidDisappear 被调用。它的 iOS App 的基本生命周期。尽量不要过多依赖 viewDidDisappear。这会对你有帮助:)
【解决方案2】:

b->c时viewDidDisappear方法已经被调用,c->a时该方法不能再调用一次b 在 a 或 c 中。希望能解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多