簡體   English   中英

通過點擊TableView單元格將數據傳遞到詳細信息視圖

[英]Pass Data to Detail View by Tapping TableView Cell

我正在嘗試在tableview和它的詳細視圖之間進行通信

請您檢查一下我的方式並給我一些建議

因此,我將Navigation Controller嵌入到Table視圖中

而且我沒有使用tableview(_:didSelectedRowAt)方法。

Stackoverflow中的一些答案,他們說重寫了prepare(:)方法,並在tableview(_:didSelectedRowAt)編寫了performSegue(withIdentifier:)方法

但是,如果我寫上面兩個屏幕所示的代碼。

(我認為是因為segue動作被觸發了兩次)

我只是將segue動作(推)從表視圖單元格(“朋友姓名”單元格)拖放到“詳細信息視圖”

通過使用此segue動作,我可以通過prepare(:segue)方法傳遞數據,以在“詳細信息視圖”中編輯選定的朋友名稱。

如果我從詳細信息視圖的文本字段中編輯朋友姓名,則有一個edit按鈕可以觸發展開搜索

所以我在Detail View Controller中覆蓋了prepare(:segue)方法

並在Table View的ViewController下方編寫了代碼

@IBAction func getEditedNameFromDetailView(_ sender:UIStoryboardSegue){
    if sender.source is DetailViewController {
        if let senderVC = sender.source as? DetailViewController {
            data[(self.someTableView.indexPathForSelectedRow?.row)!] = senderVC.editedData!
        }
        someTableView.reloadData()
    }
}

這是傳達表格視圖及其詳細信息視圖的正確方法嗎?

根據您的描述,您可能有2個segue。 一個在StoryBoard中,另一個在您的代碼中。

prepare方法未執行segue。 它只是為您提供了執行與segue相關的操作的機會,例如將數據傳遞到目標控制器。 如果您已經在StoryBoard中創建了一個,則不要調用Perform segue,反之亦然。

prepare的常見用法如下所示:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //get the destination controller and cast it to your detail class
        if let destinationController  = segue.destination as? YourDetailClassHere {
           //set the properties you want
            destinationController.someProperty = someValue
        }
    }

幾點筆記-

  • 您可以使用sender對象傳遞來自perform調用的數據。
  • 一個常見的錯誤是假設目標控制器始終是您的詳細信息控制器。 它可以是導航控制器,然后您必須從導航控制器中提取詳細信息。

暫無
暫無

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

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