单击TableViewCell时如何将数据从NSObject传递到另一个ViewController?

时间:2018-02-05 08:45:40

标签: ios uitableview tableview swift4

我的ViewController1里面有TableView。我想要做的是转到ViewController2并在用户点击TableViewCell的同时传递一段数据。

有关详细信息:

每个单元格都有itemId和其他数据,从我的API中提取后存储在NSObject类中,我使用TableViewCell类中的数据。当我{{1要performSegueViewController2,我想在itemId

中获取ViewController2

现在,我可以使用此代码点击ViewController2时转到tableViewCell

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        //here I dont know how to get the itemId for that particular cell
        performSegue(withIdentifier: "GoToSecondVc", sender: self)
}

我知道我可以这样通过itemId

var itemId : Int!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  if segue.identifier == "GoToSecondVc" , let secondVC = segue.destination as? SecondViewController{
  secondVC.itemId = self.itemId
}

现在的问题是我在itemId之前点击任何NSObject时,我不知道如何从tableViewCell获取performSeguedidSelectRowAt部分。

那么在这种情况下如何获得itemId?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let it = dataArrray[indexPath.row] as! ItemType
    performSegue(withIdentifier: "GoToSecondVc", sender: it.itemID)
}

答案 1 :(得分:1)

我建议将didSelectRowAt中选定的索引路径作为sender传递:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "GoToSecondVc", sender: indexPath)
}

prepare(for segue中使用它,不需要临时变量itemId。该代码假定items是数据源数组:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if segue.identifier == "GoToSecondVc" , let secondVC = segue.destination as? SecondViewController {
         let indexPath = sender as! IndexPath
         let item = items[indexPath.row]
         secondVC.itemId = item.itemId
     }
}