在mapView中搜索特定注释

时间:2017-03-30 17:10:50

标签: swift xcode search view mkmapview

在我的项目中,我有一个带有大量注释的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的初学者编码器

感谢您的帮助。

1 个答案:

答案 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