在UISplitViewController的详细视图中缺少标题栏

时间:2017-08-13 11:53:34

标签: ios swift ipad uisplitviewcontroller master-detail

我在容器视图中嵌入了UISplitViewController(因为它不在我的应用程序的根目录下),除了一个问题外,其中的机制运行良好:导航栏iPad上缺少详细视图。

初始设置基本如下:

  1. 在IB中,将分割视图控制器拖到故事板上,从而创建分割视图控制器,导航控制器,表视图控制器(主),基本视图控制器(详细信息)以及连接它们的segue。
  2. 使用容器视图添加常规View Controller。从容器视图创建嵌入式Segue到拆分视图控制器。
  3. 从原型单元格添加另一个segue到Detail View Controller,由主控制器中的以下代码支持:
  4. override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.performSegue(withIdentifier: "showDetail", sender: nil)
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetail" {
            let destinationViewController = segue.destination as! DetailViewController
            let path = self.tableView.indexPathForSelectedRow! as  NSIndexPath
            destinationViewController.selectedTrainingId = (self.itemList[path.row] as! MyListItem).id
        }
    }
    
    1. 添加数据。
    2. 将项目加载到主视图中并选择详细信息正在运行。

      这是IB中的样子(为了节省空间,我展示了iPhone布局,但无论如何都应该可以看到关系):

      enter image description here

      SO处理类似问题的答案很少。最接近的匹配建议为详细视图添加自己的导航控制器。我不明白为什么这是必要的,因为它在iPhone上按预期工作的事实我相信这表明详细视图使用与主(根)视图相同的导航控制器。但我试了一下。结果是,我怀疑,最初会显示一个导航栏。但是一旦选择了一个项目,该栏就会消失。以下是设置。

      enter image description here

      在许多应用程序(消息,电子邮件,Skype,...)中,您可以看到主视图和详细视图的单独顶部栏。虽然从技术上讲我的应用并不是绝对需要两者,但它并不是特别漂亮,尤其是彩色条。因此,问题是:如何获取详细信息视图的导航栏

1 个答案:

答案 0 :(得分:4)

详细视图需要自己的导航控制器才能在iPad上显示导航栏。因此,问题中的第二个图像显示正确的设置,但细节segue需要指向导航控制器。

enter image description here

关键是获取详细视图的句柄以设置所选的项目ID,这可以通过对原始代码进行少量更改来完成:

\DB::beginTransaction();
$modelA->save();
\DB::commit();
$modelB->save()
causeException();