【发布时间】:2017-10-10 09:00:49
【问题描述】:
当用户点击谷歌地图上的标记时,我制作了一个自定义视图。所以我把委托方法markerInfoWindow写成:
func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
let infoWindow = Bundle.main.loadNibNamed("emergencyInfo", owner: self.view, options: nil)!.first! as! emergencyInfo
infoWindow.frame = CGRect(x: 0, y: 0, width: 200, height: 110)
infoWindow.titleOfCenter.text = marker.title
infoWindow.addressOfCenter.text = marker.snippet
infoWindow.callNowButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
return infoWindow
}
buttonTapped 函数实现为
@objc func buttonTapped(sender: UIButton) {
print("Yeah! Button is tapped!")
}
但问题是它没有进入函数内部。
更新
根据我开始关注this tutorial 的答案,这就是我已经实现的:
首先我声明了这两个变量:
var tappedMarker = GMSMarker()
var infoWindow = emergencyInfo(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
然后在didTap 我这样做了:
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
let location = CLLocationCoordinate2D(latitude: marker.position.latitude, longitude: marker.position.longitude)
tappedMarker = marker
infoWindow.removeFromSuperview()
infoWindow = emergencyInfo(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
infoWindow.center = mapView.projection.point(for: location)
infoWindow.callNowButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) //getting error on this line
self.view.addSubview(infoWindow)
return false
}
最后我将markerInfoWindow 方法更改为:
func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
return UIView()
}
现在,当我运行代码时,我在设置 #selector(buttonTapped) 的那一行出现错误
致命错误:在展开可选值时意外发现 nil
根据一些研究,我发现这个错误发生在左侧,即infoWindow.callNowButton,因为我有一个标签infoWindow.titleOfCenter.text,我刚刚给它"Title",它崩溃了出错了。
【问题讨论】:
标签: ios swift google-maps swift3 google-maps-markers