有时来自UISplitViewControllerDelegate的willHideViewController不会被调用

时间:2012-01-15 23:04:55

标签: uisplitviewcontroller ipad uisplitviewdelegate

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

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

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

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

enter image description here enter image description here 非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

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

否则,see this example

这里他们将TableViewController作为splitviewcontroller的委托。也许你可以用TabBarController做同样的事情吗?

答案 1 :(得分: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将使用此解决方案批准某个应用时,我会更新此回复。