假设我有两个名为A和B的视图控制器。在我的视图控制器B中,我有一个表视图。当我在表格视图中选择一个单元格时,我想将该信息传递回A。
我有一个以下字典:
myData = [String: DataModel]
DataModel的形式为
struct DataModel{
var address = ""
var name = ""
}
我想将B中所选单元格的密钥发送回A。我应该如何做?
感谢您的帮助
答案 0 :(得分:2)
在class BViewController:
protocol ClassBViewControllerDelegate: class {
func didSelectTableViewCell(onRow row: Int)
}
在BViewController
中创建委托属性:
weak var delegate: ClassBViewControllerDelegate?
实现tableView委托方法tableView(_:didSelectRowAt:)
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) {
let row = indexPath.row
delegate?.didSelectTableViewCell(onRow: row)
}
告诉ClassAViewController
这样符合ClassBViewControllerDelegate
:
class ClassAViewController: UIViewController, ClassBViewControllerDelegate {
在ClassAViewController
的适当位置绑定ClassBViewController
和ClassAViewController
,例如prepareForSegue:sender:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SegueIdentifierXYZ" {
if let vc = segue.destination as? ClassBViewController {
vc.delegate = self
}
}
}
使用didSelectTableViewCell(onRow row: Int)
中的委托合同的委托方法ClassBViewControllerDelegate
ClassAViewController
:
func didSelectTableViewCell(onRow row: Int) {
print("Selected table view row is:", row)
}
答案 1 :(得分:0)
使用完成块或使用委托可以实现此目的。 使用块,您可以像这样进行编码:
在您的B VC
中为完成区块创建一个属性。
var cellSelectionCallBackHandler: ((DataModel, Int) -> Void)?
从cellSelectionCallBackHandler
设置VC A
属性。
VCObjectB.cellSelectionCallBackHandler = { (data, index) in
// Use your data here
}
从VC B
调用完成处理程序,选择像这样的单元格
cellSelectionCallBackHandler?(yourData, index)
任何疑问,请发表评论。
答案 2 :(得分:0)
可以使用委托方法来实现它。呼叫解散B的位置/方法呼叫代表。您可以在A中实现此委托。
您还可以拥有一个singleton dataHandler类,您可以在其中设置和获取所需的属性,并可以从项目中的任何位置访问它。