我的应用目前有一个本地搜索功能,可以为搜索结果添加注释。我想设置当您选择注释并点击弹出按钮时,它将在地图应用程序中打开,并提供从当前设备位置到注释的方向。但我遇到了一些问题。
首先,我的注释上没有出现弹出按钮。其次,我认为我没有正确检测到所选注释。
以下是我的搜索和所选注释的代码:
func performSearch() {
matchingItems.removeAll()
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchText.text
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.startWithCompletionHandler({(response:
MKLocalSearchResponse!,
error: NSError!) in
if error != nil {
println("Error occured in search: \(error.localizedDescription)")
} else if response.mapItems.count == 0 {
println("No matches found")
} else {
println("Matches found")
for item in response.mapItems as! [MKMapItem] {
println("Name = \(item.name)")
println("Phone = \(item.phoneNumber)")
self.matchingItems.append(item as MKMapItem)
println("Matching items = \(self.matchingItems.count)")
var annotation = MKPointAnnotation()
var coordinates = annotation.coordinate
annotation.coordinate = item.placemark.coordinate
annotation.title = item.name
self.mapView.addAnnotation(annotation)
}
}
})
}
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!,
calloutAccessoryControlTapped control: UIControl!) {
if self.mapView.selectedAnnotations?.count > 0 {
if let selectedLoc = self.mapView.selectedAnnotations[0] as? MKAnnotation {
println("Annotation has been selected")
let currentLoc = MKMapItem.mapItemForCurrentLocation()
let mapItems = NSArray(objects: selectedLoc, currentLoc)
let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]
MKMapItem.openMapsWithItems([selectedLoc, currentLoc], launchOptions: launchOptions)
}
}
}
非常感谢您的帮助,提前致谢。
performSearch()
中创建的注释?添加代码并运行后,注释视图仍然是默认的红色图钉。 - AlecviewForAnnotation
方法,因为它是一个委托方法。地图视图会自动调用它。但是你在故事板中的地图视图的delegate
出口必须连接到视图控制器。或者,在viewDidLoad
中,执行mapView.delegate = self
的代码。如果地图视图的委托没有设置,即使已经实现了委托方法,委托方法也不会被调用,地图视图将执行其默认操作。 - user467105