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

标签 ios uitableview tableview swift4

我有一个带有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/

相关文章:

ios - 在 UITableView 中交换项目 - 有 UI 问题

swift - 如何防止NSTableView调用委托(delegate)函数?

swift - 删除 tableView 单元格 SWIFT

ios - 快速上传视频到 Http 服务器?

ios - 使用自定义 uitableViewCell 在 tableView 上按下回车键或单击时隐藏键盘

ios - 通过动态原型(prototype)中的 segue 传递 myCell.textLabel?.text 值

java - JavaFX tableView 中的导航

iphone - 如何判断 AirPrint 打印机是否可用?

ios - 将纯字符串转换为 JSON 并在 Swift 中返回

ios - 无法运行 'Pod Setup'