如何从mapkit批注导航-SwiftUI / Xcode 11

问题描述 投票:0回答:1

我正在通过SwiftUI在Xcode 11.1中使用MapKit来显示带有注释的地图。批注有一个显示标题的标注,以及在rightCalloutAccessoryView上的一个按钮。当用户单击rightCalloutAccessoryView按钮时,我希望能够导航到另一个视图。

calloutAccessoryControlTapped函数中的NavigationLink无法正常工作。在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'

}

uinavigationcontroller mapkit swiftui mkannotation mkannotationview
1个回答
0
投票

[没有mapView(...) API可以做到这一点。

[您的工作类似于

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

从您的按钮获得水龙头。

这是Apple的一个很好的API设计,因为它使您可以自由使用任意控件,包括包含多个任意控件的容器视图。

将这个问题视为“如何以编程方式使用UIButton?”。在MapKit内部使用UIButton的事实不是很相关。

© www.soinside.com 2019 - 2024. All rights reserved.