4

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

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

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

在这里,我向您展示了两个正常工作的示例。

在此处输入图像描述 在此处输入图像描述 非常感谢你的帮助。

4

2 回答 2

0

我得出的结论是,这不能以我认为“足够”合法的任何方式完成。可能会令人沮丧地关闭,但是将 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;
}

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

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

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

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

于 2012-02-28T10:20:31.597 回答
0

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

否则,请参阅此示例

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

于 2012-01-19T09:28:45.950 回答