位置搜索结果叠加

时间:2012-12-28 05:29:32

标签: ios search location

我正在尝试将一个搜索栏添加到我的某个应用程序中,该应用程序允许用户输入地址信息,并显示带有可能结果的桌面视图(和键盘)。基本上与地图应用中提供的功能相同。有一个简单的方法吗?

enter image description here

有一个当前位置默认&自动完成,但不是必需的。我可以从头开始构建UI,但我不知道如何取回搜索结果。我可以使用地理编码器并将结果解析为tableview吗?

1 个答案:

答案 0 :(得分:10)

有一个标准组件,称为UISearchDisplayController

它会为您显示结果UISearchBarUITableView。 然后,您可以根据需要自定义表格视图的内容和外观。

为了控制此类控制器执行的操作,您需要符合UISearchDisplayDelegate协议。

我建议您仔细查看文档中的example app

修改

为了实现自动完成功能,您可以实现searchDisplayController:shouldReloadTableForSearchString协议的UISearchDisplayDelegate方法。它将在用户键入的每个字符处调用。

假设您有一个名为CLGeocoder的{​​{1}}属性,并且您将地标放在名为geocoder的{​​{1}}属性中,以下是您可以实现的示例实时自动完成:

NSArray

每次搜索的输入字符串发生更改时,都会使用此类字符串执行正向地理编码。在placemarks块中,将新找到的地标分配给-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self.geocoder geocodeAddressString:searchString completionHandler:^(NSArray *placemarks, NSError *error) { self.placemarks = placemarks; [self.searchDisplayController.searchResultsTableView reloadData]; }]; return NO; } 属性并重新加载表格。

请注意,由于搜索是异步的,您将负责在完成处理程序中重新加载表,并在委托方法中返回NO。返回YES将使表在搜索结束之前重新加载,这不是您想要的行为。

作为最后的评论,请记住我提供的代码很少。在真实应用中,您最好处理地理编码器可能遇到的错误,例如completionHandlerplacemarkskCLErrorGeocodeFoundNoResult,记录here