2017-08-13 152 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 
        } 
    } 
    
    相關問題