2016-11-17 53 views
2

我有一個代碼設置與prepare(for segue:)被用來傳遞信息從當前tableviewcontroller到目的地。此準備用於在表格中的任何單元格被選中時使用,但是,這不是該視圖控制器的唯一選項。還有一些來自點擊按鈕的細節,但我認爲我設置的信息傳遞方式對於任何細節都是通用的......這意味着點擊按鈕後,代碼設置應用程序的方式就是期待從細胞的繼續看到VC。由於它不會崩潰。我如何設置我的代碼,以便準備功能不是通用於任何故事板賽格(我認爲它現在是),而是專門針對細胞賽格?這裏是當前設置:如何準備特定於某個特定賽季的賽季?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let indexPath = self.tableView.indexPathForSelectedRow 
     let rowSelectedd = indexPath 
     let destViewController: MainPageCellSelectedViewController = segue.destination as! MainPageCellSelectedViewController 
     destViewController.rowSelected = rowSelectedd! 
    } 
    var rowSelectedd = IndexPath() 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     performSegue(withIdentifier: "cellSelected", sender: rowSelectedd) 
    } 

我相信問題是(糾正我,如果我錯了)在for segue: UIStoryboardSegue不是特定的,但我不知道如何設置的標識那裏。

回答

2

如果您正確地配置了這個,segue爲此具有標識符。檢查標識和弓,如果它是錯誤的一個:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard segue.identifier == "cellSelected" else {return} 
    // ... 
} 
1

可以使用標識符,但我討厭使用字符串標識符和它不是很SWIFTY。我發現我幾乎總是通過檢查的目標視圖控制器的類型來消除segue的歧義。和發件人的類型或(如乘法UIButtons的情況下)operator ===

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destination = segue.destination as? DetailViewController { 
     if sender is UITableViewCell { 
      destination.mode = .view 
     } else if sender === plusButton { 
      destination.mode = .add 
     } else if sender === editButton { 
      destination.mode = .edit 
     } 
    } 
}