2017-08-13 125 views
0

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

初始设置基本上如下:

  1. 在IB中,将一个分割视图控制器到故事板,它创建一个拆分视图控制器,导航控制器,一个表视图控制器(主),一个基本的视图控制器(细节),以及连接它们的细节。
  2. 添加具有容器视图的常规View Controller。创建一个从容器视图嵌入Segue到分割视图控制器。
  3. 从原型细胞到详细视图控制器,通过在主控制器将以下代码支持的添加另一个赛格瑞:

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 
    } 
} 
  • 添加数据。
  • 将项目加载到主视图中并选择细节正在工作。


    这里是什么样子的IB(以节省空间我展示了iPhone布局,但之间的关系应该是可见的,无论如何):

    enter image description here

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

    enter image description here

    在许多应用程序(消息,电子邮件,Skype的......),你可以看到主从的观点不同的顶级酒吧。虽然从技术上讲,我的应用程序并不是绝对需要这两种功能,但它并不是特别适合使用彩色条。所以,问题是:如何获得详细视图的导航栏

    回答

    0

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

    enter image description here

    关键是要在细节视图中的手柄,以设置所选项目的标识,可以用小的改变原来的代码来完成:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
        if segue.identifier == "showDetail" { 
    
         // Destination View Controller 
         let destinationNavigationcontroller: UINavigationController! = segue.destination as! UINavigationController 
         let destinationViewController: DetailViewController! = destinationNavigationcontroller.topViewController as! DetailViewController 
    
         // Selected Row ID 
         let path = self.tableView.indexPathForSelectedRow! as NSIndexPath 
         destinationViewController.selectedId = (self.itemList[path.row] as! MyListItem).id 
        } 
    } 
    
    相关问题