我创建了一个 MapKit 并尝试使用 MKLocalSearch。与 Apple Maps 相比,我注意到的一件事是 mklocalsearch 限制为 10 个结果。那么 Apple Maps 是如何在搜索栏下显示 15 条建议的呢?
好的,举个例子。我试图找到“巴塞罗那”。在 Apple Maps 中,它会在只写“barc”后被建议,并且在输入 barcelona 的过程中它会一直保留在建议列表中。现在在我自己的地图视图中,我实际上必须输入完整的巴塞罗那才能获得建议:西班牙,巴塞罗那。在我的路上,我得到了其他建议,但没有像西班牙、巴塞罗那这样的东西,也不像苹果地图。
关于如何让它工作以及为什么 Apple Maps 工作方式不同的任何见解(说明 15 个结果与 mklocalseach 的 10 个结果)
这是在 textField Changes 上调用的代码:
- (IBAction)searchFieldChanged:(UITextField *)sender {
if(self.locationTextfield.text.length>0)
self.tableView.hidden = NO;
else
self.tableView.hidden = YES;
NSString *query = self.locationTextfield.text;
// Create and initialize a search request object.
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = query;
request.region = self.mapsView.region;//we dont want region-specific search results!
//request.region = MKCoordinateRegionMakeWithDistance(self.mapsView.userLocation.location.coordinate,40000000, 15000000);
// Create and initialize a search object.
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
// Start the search and display the results as annotations on the map.
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error)
{
[placeMarks removeAllObjects];
NSLog(@"p-count: %lu", response.mapItems.count);
for (MKMapItem *item in response.mapItems) {
[placeMarks addObject:item.placemark];
self.tempPlacemark = item.placemark;
NSLog(@"placemark: %@", item.placemark);//.location.coordinate.latitude);
}
//if(placemarks.count==0)
// appDelegate.staticPlacemark = nil;
//[self.mapsView removeAnnotations:[self.mapsView annotations]];
//[self.mapsView showAnnotations:placemarks animated:NO];
[self.tableView reloadData];
}];
}