實現(xiàn)了一個類似于京東的地址填寫的東西,首先是省市區(qū)地址選擇,自定義pickerview,pickerview最麻煩的就是沒有默認選擇的問題,所以校驗的東西比較多,因為區(qū)分為省市區(qū)三個competent,那么就需要重復判斷
if ([NSString isNull:_selectProvicename]) {
NSString *proString = [[_provicesArray objectAtIndex:0] objectForKey:@"areaName"];
_selectProvicename = proString;
if ([NSString isNull:_selectCityname]) {
_selectCityname = [[_citysArray objectAtIndex:0] objectForKey:@"areaName"];;
}
if ([NSString isNull:_selectCountyname]) {
_selectCountyname = [[_countiesArray objectAtIndex:0] objectForKey:@"areaName"];
}
}
if ([NSString isNull:_selectCityname]) {
NSString *cityname = [[_citysArray objectAtIndex:0] objectForKey:@"areaName"];
_selectCityname = cityname;
if ([NSString isNull:_selectCountyname]) {
_selectCountyname = [[_countiesArray objectAtIndex:0] objectForKey:@"areaName"];
}
}
if ([NSString isNull:_selectCountyname]) {
_selectCountyname = [[_countiesArray objectAtIndex:0] objectForKey:@"areaName"];
}
if (self.bringSelectCityBlcok) {
self.bringSelectCityBlcok(_selectProvicename, _selectCityname, _selectCountyname);
}
這個就比較麻煩,有人有比較好的解決方案的話請給我建議。
其次是實現(xiàn)百度的poisearch
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if (textField.tag==102) {
_poisearch = [[BMKPoiSearch alloc] init];
_poisearch.delegate = self;
self.tableView.frame = CGRectMake(0.0, -45-10, SCREEN_WIDTH, self.tableView.height);
}
return YES;
}
- (void)textchangeShowSearch:(UITextField *)tf{
if (tf.text.length>0) {
BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init];
_searchString = tf.text;
citySearchOption.pageIndex = 0;
citySearchOption.pageCapacity = 10;
citySearchOption.city = self.addressModel.area;
citySearchOption.keyword = tf.text;
BOOL flag = [_poisearch poiSearchInCity:citySearchOption];
if(flag)
{
NSLog(@"城市內檢索發(fā)送成功");
}
else
{
NSLog(@"城市內檢索發(fā)送失敗");
}
[self.tableView addSubview:self.addressShowTableView];
[ self.addressShowTableView setHeight:self.view.height-self.keyboardHeight-(10+45*2)];
}
}
#pragma mark searchDelegate
#pragma mark implement BMKSearchDelegate
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult*)result errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
self.poiResult = result;
// 清楚屏幕中所有的annotation
[self.addressShowTableView reloadData];
} else if (error == BMK_SEARCH_AMBIGUOUS_ROURE_ADDR){
NSLog(@"起始點有歧義");
} else {
// 各種情況的判斷。。。
}
}
這里邊就需要考慮搜索結果出現(xiàn)后關于列表的展示以及view位置的更新的問題,百度地圖還有一個熱詞搜索,也可以配合使用會比較完美,就是需要處理其他邏輯