【问题标题】:Sometimes willHideViewController from UISplitViewControllerDelegate is not called有时不会调用 UISplitViewControllerDelegate 中的 willHideViewController
【发布时间】:2012-01-15 23:04:54
【问题描述】:

我有问题。 我的应用程序是一个标签栏控制器,它的第一个视图控制器是一个拆分视图控制器。 这对 Apple 来说似乎不太好,因为文件说 split voew 控制器必须是根,所以也许这就是我的问题的原因。

问题是,有时,UISplitViewControllerDelegate 中的 willHideViewController 没有被调用,因此,有时没有创建上/左按钮,这很烦人。 我意识到,要重现此错误,请尝试多次: - 横向模式。 - 选择与拆分视图控制器点击不同的选项卡。 - 在该选项卡中将 iPad 移动到纵向。 - 转到拆分视图控制器选项卡,有时,不会调用 willHideViewController,因此您不会看到上部按钮。但是,如果我将我的 iPad 旋转到横向,然后再旋转到纵向,它是固定的。

我试图手动强制旋转几次来解决这个问题,但没有运气。 我仍然必须尝试来自 github 或类似的任何拆分视图控制器克隆类。 你知道发生了什么或有什么解决方法吗?

这里我给你展示两个正常工作的例子。

非常感谢您的帮助。

【问题讨论】:

  • 您好,我也遇到了同样的问题,请问您解决了吗?我认为需要一种在所有选项卡中传播 willShow... willHide 调用的方法。很郁闷...
  • 这里也有同样的问题,UISplitViewControllerUITabBarController 中也是如此。在我的应用程序中,UISplitViewController 行为还取决于应用程序启动的方向:如果它以横向启动,则行为如您所描述的那样。但是,如果应用以纵向启动,则您的方案可以正常工作,但当应用旋转到横向时会出现问题(UISplitViewController 不会调用 willShowViewController:invalidatingBarButtonItem: 委托方法)。

标签: uisplitviewcontroller ipad uisplitviewdelegate


【解决方案1】:

你在哪里设置 splitViewControllers 委托?也许您可以在加载选项卡时设置委托。好像只旋转一次才设置?

否则,see this example

这里他们让 TableViewController 成为 splitviewcontroller 的代表。也许您可以对 TabBarController 做同样的事情?

【讨论】:

    【解决方案2】:

    我得出的结论是,不能以我认为“足够”合法的任何方式进行。可能会令人沮丧地关闭,但是将 willShow...、willHide 传播到每个选项卡下的拆分视图控制器的问题仍然存在。

    似乎最有可能奏效的解决方案是,

    https://github.com/grgcombs/IntelligentSplitViewController/blob/master/IntelligentSplitViewController.m

    虽然这段代码无疑很聪明,但对我来说它有点太“偏门”了。我怀疑(但不知道)仅调用委托方法是不够的。 UISplitViewController 本身肯定需要更改其内部状态以及调用委托方法吗?当方向发生变化时,此方法“只是”调用委托方法。

    所以...我决定采用更合理的解决方案,即使用 iOS 5 中引入的新方法。

    - (BOOL) splitViewController:(UISplitViewController *)svc
                 shouldHideViewController:(UIViewController *)vc
                 inOrientation:(UIInterfaceOrientation)orientation
    {
         return NO;
    }
    

    因此,主菜单永远不会隐藏,因此不会出现管理弹出框的问题。

    当然,这仍然不完全“合法”,因为它仍然包含不在顶层的 UISplitViewController(UITabViewController 在顶层,拆分视图在每个选项卡上)

    无论您选择哪种解决方案,祝您好运。

    当我确认 Apple 将批准使用此解决方案的应用后,我会更新此回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多