Ipad 未调用UISplitViewController委托方法

Ipad 未调用UISplitViewController委托方法,ipad,uisplitviewcontroller,uiinterfaceorientation,Ipad,Uisplitviewcontroller,Uiinterfaceorientation,我在uitabarcontroller中使用uiplitviewcontroller,在拆分视图的主窗格中使用普通的UIViewController,在细节窗格中使用UINavigationController,它本身包含一个普通的UIViewController 我知道苹果建议只在根级别使用分割视图,但我见过其他应用程序(如Amazon-“愿望列表”选项卡)在选项卡中使用分割视图,所以我确信这是可能的 我的问题是分割视图的委托方法(即UISplitViewControllerDelegate中

我在
uitabarcontroller
中使用
uiplitviewcontroller
,在拆分视图的主窗格中使用普通的
UIViewController
,在细节窗格中使用
UINavigationController
,它本身包含一个普通的
UIViewController

我知道苹果建议只在根级别使用分割视图,但我见过其他应用程序(如Amazon-“愿望列表”选项卡)在选项卡中使用分割视图,所以我确信这是可能的

我的问题是分割视图的委托方法(即
UISplitViewControllerDelegate
中的委托方法)不会被调用,这会阻止我在切换到纵向模式时创建弹出菜单

所讨论的方法如下-

// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;

// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;

// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController;
UISplitViewController
不接收旋转通知

如果我在应用程序启动开始时使用强制状态栏方向向右(或向左)横向移动,我可以调用willShowViewController方法

 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
但是,
willihidevewcontroller
不会被调用。我不想强迫应用程序在横向启动。如果我做同样的事情,但强迫它肖像,我不会收到回调

我不明白为什么拆分视图控制器在其他方面表现正常时却不调用它的委托方法。应该从其方法调用这些方法-

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
在内部,当我在其中设置断点时,我可以检查委托是否已设置并且它仍然处于活动状态

我整天都在忙这个!其他一切都很好,我很高兴splitview/tabbar/navbar组合工作得很好。我只需要这些通知


我是否应该在旋转时手动调用它们?当“UISplitViewController”应该这样做时,似乎是非常错误的。

解决了这个问题,它必须位于根级别,或者也必须位于根级别的选项卡栏的直接子视图。讨厌

首先,尝试查看您是否设置了正确的代理。 e、 比如说你创建了三个控制器

UISplitViewController* splitView;
UIViewController* masterView;
UIViewController* detailView;
您在详细视图中实现了委托协议,因此当方向发生变化时,详细视图应该能够在工具栏中放置一个按钮

现在,为了让splitView从委托调用此函数,您需要设置委托本身

所以在某个地方,如果你错过了下面的电话

splitView.delegate = detailView;

detailView永远不会收到方向更改等通知。至少这是我被卡住的地方。

我喜欢以下从主UIViewController向detail UIViewController发送消息的方法。在master实现中的某个地方:

id detailViewController = [[self.splitViewController viewControllers] lastObject];
[detailViewController setSomeProperty:…];

这是Paul Hegarty 2011年秋季斯坦福iTunesU iPad和iPhone应用程序开发课程中的内容。

您好,您是否介意进一步阐述您的解决方案?我现在也有同样的问题。我有一个tabcontroller,它有三个选项卡中的splitview。我将每个splitview中的detailview添加到自己的子类navigationcontroller中,该子类代表splitview。这对于当前可见的选项卡来说是完美的,但对于其他选项卡则不是。因此,当我旋转视图并更改选项卡时,它看起来乱七八糟,直到我旋转它为止。再说一次,那只是为了可见的视野。嗯,对不起,我不太清楚。。我肯定在这里的某个地方看到过一篇帖子,指出在splitview选项卡和旋转之间切换会导致问题,splitviwe应该始终处于窗口级别,甚至不在选项卡控制器下。我想这是有文档支持的。实际上,我正在从头开始构建我自己的SplitView,因为我需要水平拆分,而不是从头开始尝试,试试这个-由于许可证的原因,这不是一个选项。最后我自己做了一个,很简单,很好用。山姆,你能分享一下示例代码吗,你是如何解决这个问题的,我是金娜,我非常喜欢你的想法,因为这是一个跳出框框的想法。