Swift - Как я могу вызвать переход при нажатии кнопки MKAnnotation? - PullRequest
0 голосов
/ 12 июня 2018

Вопрос Swift-Newbie:

У меня есть два контроллера вида: мой домашний виртуальный канал, который использует MapKit и второй MapDetailViewController для отображения дополнительной информации.

На домашнем VC я добавил интересную точку с аннотацией, чтобы отобразить название точки и субтитры, когда пользователь нажимает на булавку.Как я могу перейти к моему MapDetailViewController, когда пользователь нажимает на аннотацию карты?

// Map view delegate which handles the annotation view
    extension ViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, viewFor annotation: 
        MKAnnotation) -> 

MKAnnotationView? {

    guard let annotation = annotation as? Artwork else { return nil }

    let identifier = "marker"

    var view: MKMarkerAnnotationView

    if let dequeuedView = 
mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? 
MKMarkerAnnotationView {

        dequeuedView.annotation = annotation

        view = dequeuedView

    } else {

        view = MKMarkerAnnotationView(annotation: annotation, 
reuseIdentifier: identifier)

        view.canShowCallout = true

        view.calloutOffset = CGPoint(x: -5, y: 5)

        // Broke up the button initialisation so that it has unique id 'button'
        let button = UIButton(type: .detailDisclosure)

        view.rightCalloutAccessoryView = button

        // Make the segue happen - tried to make it happen when object 'button' is pressed

        performSegue(withIdentifier: "MapDetail", sender: button)

    }

    return view
}

1 Ответ

0 голосов
/ 12 июня 2018

Это выдержка из старого проекта, над которым я работал.Он открывает новый контроллер табличного представления, когда информационный аксессуар нажимается на аннотацию.У меня был специальный класс под названием Annotation, который содержал всю информацию о аннотации.Я не уверен, поможет ли это:)

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView,
            calloutAccessoryControlTapped control: UIControl) {

        let annotation = view.annotation as! Annotation
        let event = annotation.event

        if control == view.rightCalloutAccessoryView {
            let destination = self.storyboard!.instantiateViewController(withIdentifier: "EventViewController") as! EventViewController
            self.navigationController!.pushViewController(destination, animated: true)
            destination.event = event
    }
}  
...