Передача данных через Segue из mapView MKAnnotiation, который был нажат - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь передать данные через последовательность, созданную нажатием на выноску MkAnnotation с помощью элемента управления calloutAccessoryControlTapped.Я хочу перейти к EventViewController и сделать экран с дополнительной информацией о выбранной MkAnnotation.

Я пробовал несколько разностных методов, включая создание собственного класса и попытку его отправки.Передача происходит правильно, но никакие данные не передаются моему второму 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)
    }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Вам необходимо установить annotationView в методе делегата в качестве отправителя метода performSegue.

extension ViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
        performSegue(withIdentifier: "goToEventScreen", sender: view)
    }
}

Затем подготовьтесь к следующему методу:

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
        }
    }
}

Что вы делаете, это получаете аннотацию из выбранного аннотации и присваиваете ее точкам назначения.

...