我正在尝试在tableview和它的详细视图之间进行通信
请你检查我的方式并给我一些建议
所以,我将导航控制器嵌入到表视图
我没有使用tableview(_:didSelectedRowAt)
方法。
Stackoverflow中的一些答案,他们说覆盖prepare(:)
方法并在performSegue(withIdentifier:)
tableview(_:didSelectedRowAt)
方法
但如果我像上面那样编写代码,则会显示两个屏幕。
(我认为因为segue动作被触发了两次)
我只是将segue动作(推送)从表格视图单元格(朋友姓名单元格)拖放到详细视图
通过使用此segue操作,我可以通过prepare(:segue)
方法传递数据,以便在详细信息视图中编辑所选的朋友姓名
如果我从详细视图的文本字段编辑好友名称,则会有edit
按钮触发展开segue
所以我在详细视图控制器中重写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()
}
}
这是传递表视图及其详细视图的正确方法吗?
答案 0 :(得分:1)
根据您的描述,您可能有2个segues。一个在StoryBoard中,一个在你的代码中。
准备方法不执行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
}
}
几个笔记 -