willHideViewController调用,尽管应用处于横向模式



我正在开发一个以横向模式启动的iPad应用程序。

第一个屏幕显示一个UISplitViewController和我的问题是,尽管应用程序是在横向模式委托是通知splitViewController:willHideViewController:withBarButtonItem:forPopoverController:尽管文档中说:

当分屏视图控制器旋转时从风景画到肖像画朝向,它通常隐藏其中一个它的视图控制器。当发生时,它调用这个方法协调添加一个按钮到控件的工具栏(或导航栏)剩下的自定义视图控制器。如果你想要即将隐藏的视图控制器以a的形式显示弹窗,你必须实现这个方法,并使用它来添加指定的按钮到你的界面。

由于应用处于横向模式,而不是过渡到纵向模式,我不明白为什么我的委托会被通知。为什么会这样呢?

valentin,直接回答"为什么是这样?",我认为答案很简单,这是他们的API实现中的错误。

你似乎已经发现,当在横向方向,它调用上面的当它似乎不应该,然后调用splitViewController:willShowViewController:invalidatingBarButtonItem:。

也,我发现当在纵向方向时,它发送一个非常早的消息(即在view.frame被调整之前)到splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

我看到的最让我恼火的一件事是,使用模板创建中提供的代码,按钮栏会在启动时出现然后消失。

我的解决方案是实现一个解决方案,我已经张贴在git@github.com:johnkdoe/freeforall.git在类KludgeWorkaroundForBuggySplitViewDelegateStartup。

让它成为当前细节视图控制器类的超类,如

//@interface MyViewController : UIViewController<UISplitViewControllerDelegate>
@interface MyViewController : KludgeWorkaroundForBuggySplitViewDelegateStartup

这将设置初始按钮栏标题为Master如果你没有你喜欢的东西。你可以通过在子类实现中重写@property getter来重写它。如果你想做比这个kludgeWorkaround类更多的事情,你可以自己覆盖这些并(复制粘贴或)调用[super…]在做你自己的工作之前。

我不能说这解决了在我看来是一个执行错误的问题,但这个变通办法摆脱了在横向模式下启动分视图控制器应用程序时按钮栏的简短外观。

最新更新