簡體   English   中英

單擊TableViewCell時如何將數據從NSObject傳遞到另一個ViewController?

[英]How to pass data from NSObject to another ViewController when click on TableViewCell?

我有一個帶有TableViewViewController1 我想做的是,當用戶單擊TableViewCell時,同時轉到ViewController2並傳遞一條數據。

更多細節 :

每個單元有一個itemId和其他數據是存放在NSObject類從我的API,這是我使用的數據后拉TableViewCell class.So當我performSegueViewController2 ,我想獲得itemIdViewController2

現在,我可以使用以下代碼在單擊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 還是有更好的方法來做到這一點?

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let it = dataArrray[indexPath.row] as! ItemType
    performSegue(withIdentifier: "GoToSecondVc", sender: it.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
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM