Gab*_*lla 10
有一个标准组件,称为UISearchDisplayController.
它为您提供a UISearchBar和a UITableView显示结果.然后,您可以根据需要自定义表视图的内容和外观.
为了控制此类控制器执行的操作,您需要符合UISearchDisplayDelegate协议.
我建议您仔细查看可以在doc上找到的示例应用程序.
编辑
为了实现自动完成功能,您可以实现协议的searchDisplayController:shouldReloadTableForSearchString方法UISearchDisplayDelegate.它将在用户键入的每个字符处调用.
假设您有一个CLGeocoder被调用的属性geocoder,并且您将地标放在一个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;
}
Run Code Online (Sandbox Code Playgroud)
每次搜索的输入字符串发生更改时,都会使用此类字符串执行正向地理编码.在completionHandler块中,您将新找到的地标分配给您的placemarks属性并重新加载表.
请注意,由于搜索是异步的,因此您将负责在完成处理程序中重新加载表,并在委托方法中返回NO.返回YES将使表在搜索结束之前重新加载,这不是您想要的行为.
最后一点,请记住我提供的代码很少.在现实世界的应用程序,你最好小心地理编码器可能会碰到的错误,如kCLErrorGeocodeFoundNoResult,kCLErrorGeocodeFoundPartialResult和kCLErrorGeocodeCanceled,记录在这里.
| 归档时间: |
|
| 查看次数: |
4015 次 |
| 最近记录: |