5

要设置场景,我有:

  • 带有 2 个选项卡的选项卡视图控制器
  • 每个选项卡都有一个拆分视图控制器
  • 我想将每个拆分视图控制器的详细视图指向相同的视图。

我附上了一个显示问题的非常简单的示例项目

在 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 控制器预计在使用前会有一个详细的子项!
2012-04-28 07:22:58.459 svcTest[14597:f803] 拆分视图控制器应该在布局之前设置其子级!

看着故事板,我已经设置了细节视图,所以这真的让我很困惑。

故事板

非常感谢任何帮助让这个“共享”视图显示在每个选项卡上。

谢谢!

4

2 回答 2

1

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

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

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

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

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

您可以查看指向UISplitViewController 类参考的链接以获取更多信息。

于 2012-09-04T12:57:34.013 回答
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

于 2013-08-09T13:55:49.500 回答