2017-08-31 54 views
0

我試圖將一個原型單元格連接到兩個不同的segue路徑,每個路徑導致另一個視圖控制器。我在另一篇文章中讀到,連接segues必須從源視圖控制器本身到目標視圖控制器,而不是視圖控制器的原型單元。在Swift中有兩個不同分段的原型單元格

我的源視圖控制器被稱爲BuildsViewController,它被填充tableview單元格。我正在開發一個應用程序,在該應用程序中,單擊單元格將根據是否在根視圖控制器上單擊登錄或訪客按鈕來打開目標視圖控制器。 (buttonClicked是一個實例變量,用於存儲用戶在根視圖控制器上單擊的按鈕)。

但是,當我單擊BuildsViewController上的單元格時,沒有任何反應。我哪裏做錯了?請注意,登錄按鈕具有標籤0,而訪客按鈕具有標籤1.

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    switch self.buttonClicked?.tag { 
    case 0?: 
      performSegue(withIdentifier: "showLogin", sender: self) 
      break; 
    case 1?: 
      performSegue(withIdentifier: "showGuest", sender: self) 
      break; 

    default: 
     preconditionFailure() 
    } 
} 



    override func prepare (for segue: UIStoryboardSegue, sender: Any?) { 


    switch segue.identifier { 
    case "showLogin"?: 

     if let row = self.tableView.indexPathForSelectedRow?.row { 

      let build = self.buildStore.allBuilds [row] 
      let detailBuildsViewController = segue.destination as! BuildDetailViewController 
       detailBuildsViewController.build = build 
      break; 
     } 
    case "showGuest"?: 


     if let row = self.tableView.indexPathForSelectedRow?.row { 

      let build = self.buildStore.allBuilds [row] 
       let detailBuildsViewControllerGuest = segue.destination as! BuildDetailViewControllerGuest 
       detailBuildsViewControllerGuest.build = build 
      break; 
     } 
    default: 
     preconditionFailure("Unexpected segue identifier") 
     } 
    } 
    override func tableView (_ tableView: UITableView, 
         cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath) 
    let build = buildStore.allBuilds [indexPath.row] 
    cell.textLabel?.text = build.name 

    return cell 

} 

謝謝!

+0

顯示你的'cellForRowAt'代碼 –

+0

你didselect方法被調用? – luckyShubhra

+0

哦,沒錯。我需要重寫didselect方法,並且方法簽名是錯誤的。我現在修好了。它的作品非常漂亮!謝謝! @luckyShubhra –

回答

0

Swift 3修改了didSelectRowAtIndexPath方法的簽名。您需要向方法名稱添加重寫以覆蓋超類方法。

替換:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
相關問題