【发布时间】:2021-01-13 18:24:26
【问题描述】:
请帮忙。我想要达到的目标 是当我点击特定的 collectionViewCell 时,会推送 ReportDetailsMapController 并且我的报告 [indexPath.item] 从 MainController 发送到 ReportDetailsMapController。
协议:
protocol MainControllerDelegate: class {
func sendReport(data: ReportModel)
}
第一风投:
class MainController: UIViewController, UICollectionViewDelegate,UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
var delegate: MainControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let report = reports[indexPath.item]
//When I print(report.name) here. Everything executes correctly
self.delegate?.sendReport(data: report)
self.navigationController?.pushViewController(ReportDetailsMapController(), animated: true)
}
}
第二个VC:
class ReportDetailsMapController: UIViewController, MainControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let mc = MainController()
mc.delegate = self
}
func sendReport(data: ReportModel) {
print(data.name)//This does not execute when ReportDetailsMapController is loaded.
print("Report sent")
}
}
报告模型:
class ReportModel: NSObject {
var name: String?
var surname: String?
var cellNumber: String?
}
【问题讨论】:
-
一个非常常见的错误:
MainController()是一个全新的实例,它不是情节提要中的实例(我希望编译器会出错)。您需要通过 segue 或实例化的真实引用。 -
@vadian 我一直在做没有故事板的项目。
-
好的,但是
MainController()也不是视图层次结构中的预期控制器。然后你必须从导航控制器获取引用。 -
就您而言,我认为您不是代表。你可以做的是在推送到
ReportDetailsMapController时将模型注入它。