尽管应用程序处于横向模式,willHideViewController仍会调用

时间:2011-04-27 10:10:31

标签: ios ipad

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

第一个屏幕显示UISplitViewController,我的问题是,尽管应用程序处于横向模式,但代理会在splitViewController:willHideViewController:withBarButtonItem:forPopoverController:上收到通知,尽管文档说明:

  

分割视图控制器旋转时   从风景到肖像   方向,它通常隐藏其中一个   它的视图控制器。当那个   碰巧,它调用这个方法   协调添加按钮   工具栏(或导航栏)的   其余自定义视图控制器如果   你想要即将隐藏的视图   控制器显示在一个   popover,你必须实现这一点   方法并使用它来添加指定的   按钮到您的界面。

由于应用处于横向模式而未转换为肖像,因此我无法获知通知我的代理人的原因。为什么会这样?

1 个答案:

答案 0 :(得分:0)

瓦伦丁,直接回答“为什么会这样?”,我认为答案很简单就是它的API实施中存在一个错误。

正如你似乎已经发现的那样,当它处于横向时,它调用上面的时候它似乎不应该,然后调用splitViewController:willShowViewController:invalidatingBarButtonItem:。

另外,我发现在纵向时,它会发送一条非常早的消息(即在调整view.frame之前)到splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

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

我的解决方案是实现一个解决方法,我已经在git@github.com上发布了:kludgeWorkaroundForBuggySplitViewDelegateStartup类中的johnkdoe / freeforall.git。

使其成为当前详细信息视图控制器类的超类,如

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

如果您没有自己喜欢的内容,这会将初始按钮栏标题设置为Master。您可以通过覆盖子类实现中的@property getter来覆盖它。如果你想做的不仅仅是这个kludgeWorkaround类中的内容,你可以自己覆盖它们(复制和粘贴)或者在你自己的工作之前调用[super ...]。

我不能说这解决了我认为是一个实现错误的问题,但解决方法摆脱了横向模式下拆分视图控制器应用程序启动时按钮栏的简短外观。