gpt4 book ai didi

ios - 位置搜索结果叠加

转载 作者:可可西里 更新时间:2023-11-01 03:29:11 26 4
gpt4 key购买 nike

我正在尝试将搜索栏添加到我的一个应用程序中,让用户可以输入地址信息,然后会出现一个带有可能结果(和键盘)的表格 View 。 map 应用程序中提供的功能基本相同。有没有简单的方法可以做到这一点?

enter image description here

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

最佳答案

有一个用于执行此操作的标准组件,称为 UISearchDisplayController .

它为您提供了一个 UISearchBar 和一个用于显示结果的 UITableView。然后您可以根据需要自定义表格 View 的内容和外观。

为了控制此类 Controller 执行的操作,您需要遵守 UISearchDisplayDelegate协议(protocol)。

我建议你仔细看看example app你可以在文档中找到。

编辑

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

假设您有一个名为 geocoderCLGeocoder 属性,并且您将地标保存到一个名为 placemarks< 的 NSArray 属性中,这是一个如何实现实时自动完成的示例:

-(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;
}

每次搜索的输入字符串发生变化时,您都会使用此类字符串执行正向地理编码。在 completionHandler block 中,您将新找到的地标分配给您的 placemarks 属性并重新加载表格。

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

最后一点,请记住我提供的代码是最少的。在真实世界的应用程序中,您最好注意地理编码器可能遇到的错误,例如 kCLErrorGeocodeFoundNoResultkCLErrorGeocodeFoundPartialResultkCLErrorGeocodeCanceled,已记录 here .

关于ios - 位置搜索结果叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14065013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com