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

Posted

技术标签:

【中文标题】单击 TableViewCell 时如何将数据从 NSObject 传递到另一个 ViewController?【英文标题】:How to pass data from NSObject to another ViewController when click on TableViewCell? 【发布时间】:2018-02-05 08:45:39 【问题描述】:

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

更多详情:

每个单元格都有一个itemId 和其他数据存储在NSObject 类中,从我的API 提取后,我使用TableViewCell 类中的数据。所以当我performSegueViewController2 时,我想在ViewController2中获取itemId

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

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

现在的问题是当用户在didSelectRowAt 部分中的performSegue 之前点击任何tableViewCell 时,我不知道如何从NSObject 获取itemId

那么在这种情况下我怎样才能获得itemId?或者有更好的方法吗?

【问题讨论】:

放一些cellForRowAtIndex和dataArray的代码...!!! 【参考方案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
     

【讨论】:

【参考方案2】:
 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let it = dataArrray[indexPath.row] as! ItemType
    performSegue(withIdentifier: "GoToSecondVc", sender: it.itemID)

【讨论】:

以上是关于单击 TableViewCell 时如何将数据从 NSObject 传递到另一个 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章

在 TableViewCell 内单击时 UIButton 标签重置

单击 TableViewCell 以打开当前用户的配置文件视图

单击按钮时将默认 TableViewCell 更改为自定义子类

View Controller Nav 中的 iOS Refresh 按钮:单击时重新加载从解析的 JSON 创建的所有 tableViewCell

单击自定义 TableViewCell Swift 4 中的按钮时如何呈现单独的视图控制器?

如何通过单击swift4中的addImage按钮将图像一张一张添加到tableviewcell中