来来来实现百度地图模糊搜索,先看一下效果
主要用到了BMKCitySearchOption
这个城市内检索,下面我们来说一下实现过程
实现步骤
1.引入头文件,代理、协议,创建搜索全局属性和需要的属性
#import "TJMapAddressViewController.h"
#import "TJAddressTableIViewCell.h"
#import "TJAddressModel.h"
#import <BaiduMapAPI_Location/BMKLocationComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
@interface TJMapAddressViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate,BMKPoiSearchDelegate,BMKGeoCodeSearchDelegate,UIScrollViewDelegate>
{
BMKPoiSearch *_poiSearch; //poi搜索
BMKGeoCodeSearch *_geocodesearch; //geo搜索服务
}
@property (nonatomic,strong) UISearchBar *inputAddTF;//输入地址框
@property (nonatomic,strong) NSMutableArray *addressArray;//搜索的地址数组
@property (nonatomic , strong)UITableView *addressTableView;
@property (nonatomic , strong)NSMutableArray *dataArr;
@property (nonatomic,strong) TJAddressModel *model;
@property (nonatomic , strong)NSString *addressString;
/****
<保存用户输入的地址信息>
*****/
@property (nonatomic , strong)NSString *inPutAddressStr;
@end
2.设置取消代理
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
_poiSearch.delegate = self;
_geocodesearch.delegate = self;
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
_poiSearch.delegate = nil; // 不用时,置nil
_geocodesearch.delegate = nil;
}
<br />
3.实现代理方法
#pragma mark --------- poi 代理方法
-(void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode
{
if(errorCode == BMK_SEARCH_NO_ERROR)
{
/***
<这一步很重要,清空装载数据数组>
***/
self.addressArray = [NSMutableArray array];
[self.addressArray removeAllObjects];
for (BMKPoiInfo *info in poiResult.poiInfoList) {
_model = [[TJAddressModel alloc] init];
_model.titleStr = info.name;
_model.detailStr = info.address;
[self.addressArray addObject:_model];
}
[self.addressTableView reloadData];
}
NSLog(@"self.addressArray === %@",self.addressArray);
}
搜索searchBar 的代理方法
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
self.inPutAddressStr = searchText;
NSLog(@"searchBarText === %@",self.inPutAddressStr);
_poiSearch = [[BMKPoiSearch alloc]init];
_poiSearch.delegate = self;
BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init];
citySearchOption.pageIndex = 0;
citySearchOption.pageCapacity = 30;
/***
<此处的city属性需要定位城市传过来,我写了固定值>
***/
citySearchOption.city= @"成都市";
citySearchOption.keyword = searchText;
BOOL flag = [_poiSearch poiSearchInCity:citySearchOption];
if(flag)
{
NSLog(@"城市内检索发送成功");
}
else
{
NSLog(@"城市内检索发送失败");
}
}
<br />