我的ViewController1
里面有TableView
。我想要做的是转到ViewController2
并在用户点击TableViewCell
的同时传递一段数据。
有关详细信息:
每个单元格都有itemId
和其他数据,从我的API中提取后存储在NSObject
类中,我使用TableViewCell
类中的数据。当我{{1要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
?或者有更好的方法吗?
答案 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
}
}