我有一个带有ViewController1TableView。我想要做的是在用户单击ViewController2的同时转到TableViewCell并传递一条数据。

有关更多详细信息:

每个单元格都有一个itemId和其他数据,这些数据从我的API中提取后存储在NSObject类中,我使用TableViewCell类中的数据。因此,当我将performSegue转换为ViewController2时,我想在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时,我不知道如何从performSegue获取didSelectRowAt

那么在这种情况下如何获取itemId?还是有更好的方法来做到这一点?

最佳答案

我建议将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
     }
}

关于ios - 单击TableViewCell时如何将数据从NSObject传递到另一个ViewController?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48618628/

10-10 20:33
查看更多