在我的项目中,我有一个带有大量注释的mapView&我想在地图中添加搜索功能,这样我就可以搜索这些注释并快速找到我想要的注释。
我按照我在网上找到的教程,但它全局搜索(MKLocalSearch)而不是注释。
我试过寻找一个教程\帮助解决我的问题,但我现在很长时间都没有得到任何帮助。 这是我的搜索代码:
我已经做了这些注释:
$ awk 'gsub(/,/,",")==4' file
123,456,abc,qwe,fgh
的MapViewController:
let LitzmanLocation = CLLocationCoordinate2DMake(32.100668,34.775192)
// Drop a pin
let Litzman = MKPointAnnotation()
Litzman.coordinate = LitzmanLocation
Litzman.title = "Litzman Bar"
Litzman.subtitle = "נמל תל אביב 18,תל אביב"
mapView.addAnnotation(Litzman)
let ShalvataLocation = CLLocationCoordinate2DMake(32.101145,34.775163)
// Drop a pin
let Shalvata = MKPointAnnotation()
Shalvata.coordinate = ShalvataLocation
Shalvata.title = "Shalvata"
Shalvata.subtitle = "האנגר 28,נמל תל אביב"
mapView.addAnnotation(Shalvata)
let MarkidLocation = CLLocationCoordinate2DMake(32.074961,34.781679)
// Drop a pin
let Markid = MKPointAnnotation()
Markid.coordinate = MarkidLocation
Markid.title = "Markid"
Markid.subtitle = "אבן גבירול 30,תל אביב"
mapView.addAnnotation(Markid)
SearchTable:
//All my Map code is here
}
}
}
extension MapViewController: HandleMapSearch {
func dropPinZoomIn(placemark:MKPlacemark){
// cache the pin
selectedPin = placemark
// clear existing pins
let annotation = MKPointAnnotation()
annotation.coordinate = placemark.coordinate
annotation.title = placemark.name
if let _ = placemark.locality,
let _ = placemark.administrativeArea {
annotation.subtitle = ""
}
mapView.addAnnotation(annotation)
let span = MKCoordinateSpanMake(0.01, 0.01)
let region = MKCoordinateRegionMake(placemark.coordinate, span)
mapView.setRegion(region, animated: true)
}
}
我的问题是如何将其转换为仅搜索我的注释而不是使用MKLocalSearch搜索全世界。
我是使用swift 3和Xcode 8的初学者编码器
感谢您的帮助。
答案 0 :(得分:0)
如果你真的不想搜索整个地图,你应该完全离开MKLocalSearch
。您可以选择使用MKLocalSearchRequest.region
确定给定区域的优先级,但实际上不能限制搜索。而不是那样,你应该遍历annotations
的{{1}}变量。
MKMapView
编辑:我刚刚注意到你说你使用的是Swift 2.3,我的代码是Swift 3.如果你使用的是Swift 2.3,你应该将extension String {
func caseInsensitiveSearch(_ string: String) -> Bool {
if self.lowercased().range(of: string.lowercased()) != nil {
return true;
} else {
return false;
}
}
}
extension MKMapView {
func searchForCustomAnnotation(like query: String) -> [MyCustomAnnotationClass] {
let allAnnotations = self.annotations;
return allAnotations.filter { annotation in
if let customAnnotation = annotation as? MyCustomAnnotationClass {
return customAnnotation.title.caseInsensitiveSearch(query);
}
}
}
}
方法更改为:
String.caseInsensitiveSearch
然后,您可以使用extension String {
func caseInsensitiveSearch(_ string: String) -> Bool {
if self.lowercaseString.rangeOfString(string.lowercaseString) != nil {
return true;
} else {
return false;
}
}
}
上的searchForCustomAnnotation
获取包含搜索查询标题的所有注释列表。
您的代码如下所示:
MKMapView