我目前正在开发一个功能,用户可以点击地图注释并将其带到另一个屏幕,该屏幕将保存该位置的图像。我正在使用Mapbox和tapOnCallout函数来转换到另一个视图控制器(imageLocationViewController),它将保存图像视图。
我面临的问题是让这个imageLocationViewController知道哪个注释被点击了,因此应该显示哪个图像。我正在使用firebase来保存我的数据,在注释数据中我有一个photoUrl,它保存了相关的图像。
当我正在进行调查时,我目前能够打印注释的相关名称和照片Url。但是,一旦我在imageLocation View Controller中,我相信我丢失了这些数据?
是否有人知道如何将此数据传递到新的视图控制器,以便我可以将正确的photoUrl传递到图像视图中。
这是我当前代码到imageLocationViewController的代码。
func mapView(_ mapView: MGLMapView, tapOnCalloutFor annotation: MGLAnnotation) {
if let annotation = annotation as? SkateAnnotation {
self.performSegue(withIdentifier: "SkateImageSegue", sender: annotation.id)
print("YourAnnotation: \(annotation.photoUrl)")
}
}
更新**准备segue的代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EditSaveSpotSegue" {
let destination = segue.destination as! EditSaveSpotViewController
destination.parkId = sender as! String
}
}
答案 0 :(得分:0)
我会在你调用performSegue
之前触发mapView委托函数时设置一个局部变量,然后在prepareForSegue
中使用该变量。见下文
var annotationId: String = ""
func mapView(_ mapView: MGLMapView, tapOnCalloutFor annotation: MGLAnnotation) {
if let annotation = annotation as? SkateAnnotation {
annotationId = annotation.id
self.performSegue(withIdentifier: "SkateImageSegue", sender:self)
print("YourAnnotation: \(annotation.photoUrl)")
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EditSaveSpotSegue" {
let destination = segue.destination as! EditSaveSpotViewController
destination.parkId = annotationId
}
}