【问题标题】:Two UISplitViewControllers, 1 (Shared) Detail View两个 UISplitViewControllers,1 个(共享)详细视图
【发布时间】:2012-04-27 21:28:36
【问题描述】:

设置我的场景:

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

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

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

谢谢!

【问题讨论】:

    标签: objective-c ipad uisplitviewcontroller uistoryboard uistoryboardsegue


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      问题在于 App Delegate 的 -applicationdidFinishLaunchingWithOptions: 中的某些行的位置

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

      改用此代码:

      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

      【讨论】:

      • 感谢您的建议。在 .viewControllers 分配之后移动 .delegate 并没有看到警告消失,但在我的情况下,我能够通过移动我在 .viewControllers 之后设置的一些属性来修复它(特别是 preferredDisplayMode、preferredPrimaryColumnWidthFraction ...)。我正在写关于 iOS 9.3 的文章。
      猜你喜欢
      • 1970-01-01
      • 2014-10-01
      • 2020-12-30
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多