Как перемещаться из аннотации mapkit - SwiftUI / Xcode 11 - PullRequest
0 голосов
/ 27 октября 2019

Я использую MapKit в Xcode 11.1 с SwiftUI, чтобы показать карту с аннотациями. Аннотации имеют выноску, в которой отображается заголовок, и кнопку в правом элементе CallCalloutAccessoryView. Я хочу иметь возможность перейти к другому представлению, когда пользователь нажимает кнопку rightCalloutAccessoryView.

Функция NavigationLink в функции calloutAccessoryControlTapped не работает. Как это сделать в SwiftUI? Любая помощь очень ценится!

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "AnnotationView")

if annotationView == nil {
    annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "AnnotationView")
}

let whiteImage = UIImage(named: "white")

annotationView!.image = whiteImage
      annotationView?.isEnabled = true
      annotationView?.canShowCallout = true
      annotationView?.centerOffset = CGPoint(x: 0, y: -23)


let button = UIButton(type: .detailDisclosure)
annotationView?.rightCalloutAccessoryView = button

return annotationView

}

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

@State var tapped = true
//ERROR: Property wrappers are not yet supported on local properties

NavigationLink(destination: DetailView(), isActive: $tapped) {EmptyView()}
//ERROR: Use of unrecognized identifier '$tapped'

}

1 Ответ

0 голосов
/ 31 октября 2019

Для этого нет mapView(...) API.

То, что вы делаете, это что-то вроде

button.addTarget(self, action: #selector(self.buttonAction(_:)), for: .touchUpInside)

, чтобы получить нажатие кнопки.

Этоявляется хорошим дизайном API от Apple, поскольку он дает вам свободу использовать произвольные элементы управления, в том числе контейнерные представления, содержащие несколько произвольных элементов управления.

Думайте об этой проблеме как о «как использовать UIButton программно?». Тот факт, что UIButton используется внутри MapKit, не очень важен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...