[英]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
}
}
幾點筆記-
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.