iOS中点击Google地图自定义信息窗口传递userData至下页失败求助
问题原因及解决方案
嘿,问题出在你prepare(for:sender:)方法里的一个关键错误!你在这个方法里新建了一个完全空白的GMSMarker实例:
let marker = GMSMarker()
这个新建的marker根本没有被设置过userData,所以marker.userData自然是nil,导致next.team也跟着变成nil。
你需要传递的是用户实际点击的那个信息窗口对应的marker,而不是重新创建一个空的。下面是修正步骤:
步骤1:修改信息窗口点击事件,传递正确的sender
把didTapInfoWindowOf方法里的performSegue的sender换成当前点击的marker:
func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) { // 把点击的marker作为sender传递给segue self.performSegue(withIdentifier: cellId, sender: marker) }
步骤2:在转场准备方法中获取正确的marker和数据
修改prepare(for:sender:)方法,从sender中取出点击的marker,再提取对应的Team数据:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == cellId { // 先验证sender是我们需要的GMSMarker,并且能正确转成Team类型 guard let tappedMarker = sender as? GMSMarker, let selectedTeam = tappedMarker.userData as? Team else { return } let nextVC = segue.destination as! NextViewController nextVC.team = selectedTeam } }
这样修改后,转场时就能把用户点击的那个marker对应的Team数据正确传递到下一个视图控制器啦!
内容的提问来源于stack exchange,提问作者Daibaku
相关产品推荐
相关产品推荐

