UISplitViewController委托方法不叫
我使用的是UISplitViewController
内的UITabBarController
与拆分视图的主窗格纯UIViewController
和在细节窗格,它本身含有香草UIViewController
一个UINavigationController
。UISplitViewController委托方法不叫
我知道Apple建议仅在根级别使用拆分视图,但是我已经看到其他应用程序(例如,亚马逊 - “愿望清单”选项卡)在选项卡中使用拆分视图,所以我相信这是可能的。
我的问题是,拆分视图的委托方法,即。 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];
然而,willHideViewController
没有按不会打电话。我不想强制应用程序开始景观。如果我做同样的事情,但强迫它肖像,我没有收到回调。
我不明白为什么分割视图控制器没有调用它的委托方法,否则它的行为是正确的。这些方法应该从它的方法 - 被称为
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
内部,当我断点在这里面,我可以检查委托设置,它仍然活着。
一直呆在这一整天!其他一切都很好,我很高兴splitview/tabbar/navbar组合运行良好。我只需要这些通知。
我应该在旋转时手动调用它们吗?当'UISplitViewController'应该这样做时,似乎非常错误。
解决了,它必须位于根级或tabBar的直接子视图,该视图条也必须位于根级别。烦!
首先,试着看看你是否设置了正确的代表。 例如,假设你创建了三个控制器,
UISplitViewController* splitView;
UIViewController* masterView;
UIViewController* detailView;
您实现了委托协议的详细视图,这样,当方向的变化,详细视图应该能够把一个按钮在工具栏中。
现在为了使splitView从代理调用此函数,您需要设置委托本身。
所以某个地方,如果你错过下面的调用,
splitView.delegate = detailView;
的DetailView的将永远不会得到通知的方向变化等。至少这是我被卡住了。
另一种选择是查看下面的链接。它也有一个完整的工作代码,虽然经过一番审查后,它可能比你需要的东西有点多,但是嘿,这是一个已经工作的代码,所以应该让你快点。
http://www.noorselijster19.com/2011/03/ios/combine-tabbar-and-splitview/
我喜欢从主UIViewController中对细节的UIViewController发送消息的以下方法。某处主人的里面执行:
id detailViewController = [[self.splitViewController viewControllers] lastObject];
[detailViewController setSomeProperty:…];
这是保罗·赫加蒂的2011年秋季斯坦福iTunesU iPad和iPhone应用程序开发过程。
你好, 你介意一点点进一步阐述您的解决方案? 我现在有同样的问题。我有一个tabcontroller至少有3个选项卡的分割视图。我将每个splitview中的detailview添加到一个代表splitview的自己的子类导航控制器中。这对于目前可见的选项卡来说是完美的,但对于其他选项则不是。所以当我旋转我的视图,并更改选项卡它看起来都搞砸了,直到我旋转它。再次,然后只为可见的看法。 – 2011-02-09 17:07:01
嗯抱歉,我不确定..我敢肯定我在这里看过一篇文章,指出在splitview选项卡和旋转之间更改会导致问题,并且splitviwe应始终处于窗口级别 - 甚至不会在标签控制器。我猜想这是由文档支持的。我实际上是从零开始构建自己的SplitView,因为我需要水平分割 – Sam 2011-02-09 22:29:37