我试图通过使用calloutAccessoryControlTapped控件点击MkAnnotation标注创建的序列传递数据。我想转到EventViewController并制作一个屏幕,其中包含有关所选MkAnnotation的更多信息。
我尝试了许多不同的方法,包括创建自定义类并尝试发送它。 segue正确发生,但没有数据传递到我的第二个UIViewController(eventViewController)。
我假设每次都做错了事,但是由于将数据分配给变量的原因也是调试的触发,因此很难调试代码。
即我假设根本没有分配数据,但“ selectedAnnotation”变量已正确传递,但显然很难分辨。
override func prepare(for segue: UIStoryboardSegue, sender: (Any)?) {
if segue.identifier == "goToEventScreen" {
selectedAnnotation = mapView.selectedAnnotations.lastObject as? MKAnnotation
let destinationVC = segue.destination as! EventViewController
destinationVC.points = selectedAnnotation
}
}
}
'''
extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView,
calloutAccessoryControlTapped control: UIControl){
performSegue(withIdentifier: "goToEventScreen", sender: self)
}
}
谢谢。
答案 0 :(得分:0)
您需要将委托方法中的annotationView
设置为performSegue
方法的发送者。
extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
performSegue(withIdentifier: "goToEventScreen", sender: view)
}
}
然后准备segue方法:
override func prepare(for segue: UIStoryboardSegue, sender: (Any)?) {
if segue.identifier == "goToEventScreen" {
if let annotationView = sender as? MKAnnotationView {
selectedAnnotation = annotationView.annotation
let destinationVC = segue.destination as! EventViewController
destinationVC.points = selectedAnnotation
}
}
}
您要做的是从选定的批注视图中获取批注,并将其分配给destinationVC的点。