两个UISplitViewControllers,1个(共享)详细信息视图

时间:2012-04-27 21:28:37

标签: objective-c ipad uisplitviewcontroller uistoryboard uistoryboardsegue

设置我拥有的场景:

  • 带有2个标签的标签视图控制器
  • 每个标签都有一个拆分视图控制器
  • 我想将每个拆分视图控制器的详细信息视图指向 相同的观点。

我附上了一个非常简单的sample project showing the issue

在iPad 5.1 Sim中运行它,观察每个标签。一个显示共享详细信息视图,一个失败。

NSLog调试报告第二个拆分视图具有NULL详细信息视图控制器:

2012-04-28 07:21:55.451 svcTest[14597:f803] tabBarController viewControllers = (
    "UISplitViewController: 0x6a36100",
    "UISplitViewController: 0x6a39ab0"
)
2012-04-28 07:21:55.455 svcTest[14597:f803] svcA.viewControllers = (
    "UINavigationController: 0x6a36250",
    "UIViewController: 0x6a38720"
)
2012-04-28 07:21:55.457 svcTest[14597:f803] svcB.viewControllers = (
    "UINavigationController: 0x6a39cc0"
)

单击第二个选项卡时出现此错误:

2012-04-28 07:22:58.457 svcTest[14597:f803] Splitview controller  is expected to have a detail children before its used!
2012-04-28 07:22:58.459 svcTest[14597:f803] Split view controller  should have its children set before layout!

查看故事板我已经设置了详细视图,所以这让我很困惑。

Storyboard

非常感谢您在每个标签上显示此“共享”视图的任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

我为splitViewController指定了两个以上的viewControllers时收到了同样的警告,如下所示:

self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController, subViewController];

当我从数组中删除'subViewController'时,警告消失了。

在阅读关于添加/删除子视图的Apple文档后,它会提到以下内容:

  

此属性中的数组必须包含两个视图控制器。当视图控制器处于横向方向时,它们在拆分视图界面中从左向右呈现。因此,索引0处的视图控制器显示在左侧,索引1处的视图控制器显示在界面的右侧。

您可以查看UISplitViewController Class Reference的链接以获取更多信息。

答案 1 :(得分:1)

问题在于放置位于App Delegate的-applicationdidFinishLaunchingWithOptions:

中的一些行

这里,分割视图控制器委托在viewControllers之前设置。这似乎是问题的根源,如果您反转如下所示的两行,警告消息将消失:

请改用此代码:

self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.viewControllers = [NSArray
                           arrayWithObjects:masterNavigationController,
                           detailNavigationController, nil];
self.splitViewController.delegate = detailViewController;

有关详细说明,您可以查看:Splitview Controller Is Expected to Have a Master View Controller