我是编码和堆栈溢出的新手,所以如果我做错了什么,请原谅我。
我正在使用 MKLocalSearch 来显示由字符串指定的位置。我有一个用户和位置,所以一切都设置好了。
我已经将MKLocalSearch添加到我的应用程序中,它可以正常工作,但现在在用户的位置上放置了MKPoint注释。当然,我希望出现著名的蓝点而不是注释。
我已经尝试查看代码并查找此问题,但没有任何运气找到解决方案。
这是我的MKLocal搜索代码:
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = "Dispensaries"
request.region = MapView.region
let search = MKLocalSearch(request: request)
search.start(completionHandler: {(response, error) in
if error != nil {
print("Error occured in search")
} else if response!.mapItems.count == 0 {
print("No matches found")
} else {
print("Matches found")
for item in response!.mapItems {
let annotation = MKPointAnnotation()
annotation.title = item.name
annotation.coordinate = item.placemark.coordinate
DispatchQueue.main.async {
self.MapView.addAnnotation(annotation)
}
print("Name = (String(describing: item.name))")
print("Phone = (String(describing: item.phoneNumber))")
print("Website = (String(describing: item.url))")
}
}
})
这是我的观点注释
extension MapViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "reuseIdentifier") as? MKMarkerAnnotationView
if view == nil {
view = MKMarkerAnnotationView(annotation: nil, reuseIdentifier: "reuseIdentifier")`
let identifier = "hold"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
if annotationView == nil {
annotationView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView?.canShowCallout = true
let btn = UIButton(type: .detailDisclosure)
annotationView?.rightCalloutAccessoryView = btn
} else {
annotationView?.annotation = annotation
}
}
view?.annotation = annotation
view?.displayPriority = .required
return view
}
}
> 在func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation)
检查注释类型,例如
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation { return nil }
// the rest of your code
}
如果从此方法返回nil
,则MKMapView
使用其默认的内置注释视图,MKPointAnnotation
它使用红色图钉,MKUserLocation
要查找的蓝点。