我正在通过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'
}
[没有mapView(...)
API可以做到这一点。
[您的工作类似于
button.addTarget(self, action: #selector(self.buttonAction(_:)), for: .touchUpInside)
从您的按钮获得水龙头。
这是Apple的一个很好的API设计,因为它使您可以自由使用任意控件,包括包含多个任意控件的容器视图。
将这个问题视为“如何以编程方式使用UIButton?”。在MapKit内部使用UIButton
的事实不是很相关。