1>.有两个控制器,主动传值或者提供方法的控制器A,接受值的控制器B
2>.让A控制器typedef void(^myBlock)(),而后copy一个myBlock类型的属性:
@property(nonatomic ,copy) myBlock block;
3>.在B控制器中建立A控制器,而后调用A控制器的方法
4>.在A控制器方法中,记录block:self.block = block;
5>.在合适的地方调用block:self.block(poiResultList.poiInfoList);
6>.调用之后block参数里边已经有值,这个时候在B控制器中调用A控制器的方法中参数block开始执行,而且block中参数也已经有值.atom
1>.谁要传值,谁声明和定义block以及把block做为参数的方法
2>.传值方记录下来block,在合适的时候调用
3>.接受值方,调用方法,等传值方调用block的时候才会在代码块中拿到block传过来的参数值.spa
@interfaceTSYBaiduTool() @property(nonatomic,copy) Blockblock; /** poi检索对象*/ @property(nonatomic,strong)BMKPoiSearch*searcher; @end @implementationTSYBaiduTool single_implementation(TSYBaiduTool) - (void)getPoiWithCeneter:(CLLocationCoordinate2D)centerkey:(NSString*)key Result:(Block)block{ //记录block self.block=block; //初始化检索对象 _searcher=[[BMKPoiSearch alloc] init]; _searcher.delegate=self; //发起检索 BMKNearbySearchOption*option = [[BMKNearbySearchOption alloc] init]; option.pageIndex=0; option.pageCapacity=20; option.location= center; option.keyword= key; BOOLflag = [_searcherpoiSearchNearBy:option]; if(flag){NSLog(@"周边检索发送成功");}else {NSLog(@"周边检索发送失败");}
@interfaceTSYBaiduTool() @end @implementationTSYBaiduTool - (void)addAnnotationCenter:(CLLocationCoordinate2D)centertitle:(NSString*)title subTitle:(NSString*)subTile toMapView: (BMKMapView*)mapView{ //添加一个PointAnnotation BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc] init]; annotation.coordinate= center; annotation.title= title; annotation.subtitle= subTile; [mapViewaddAnnotation:annotation]; }
@interfaceTSYBaiduTool() @end @implementationTSYBaiduTool #pragmamark - BMKPoiSearchDelegate //实现PoiSearchDeleage处理回调结果 -(void)onGetPoiResult:(BMKPoiSearch*)searcherresult:(BMKPoiResult*)poiResultListerrorCode:(BMKSearchErrorCode)error{ if(error ==BMK_SEARCH_NO_ERROR) { //在此处理正常结果 self.block(poiResultList.poiInfoList); } else if(error ==BMK_SEARCH_AMBIGUOUS_KEYWORD){ //当在设置城市未找到结果,但在其余城市找到结果时,回调建议检索城市列表 //result.cityList; NSLog(@"起始点有歧义"); }else{ NSLog(@"抱歉,未找到结果--%zd", error);} } @end
#import typedef void(^Block) (NSArray*result); @interfaceTSYBaiduTool :NSObject single_interface(TSYBaiduTool) -(void)getPoiWithCeneter:(CLLocationCoordinate2D)centerkey:(NSString*)key Result:(Block)block; -(void)addAnnotationCenter:(CLLocationCoordinate2D)centertitle:(NSString*)title subTitle:(NSString*)subTile toMapView:(BMKMapView*)mapView; @end
#import"TSYBaiduTool.h" @interfaceViewController() @property(weak,nonatomic) IBOutlet BMKMapView*mapView; @end @implementationViewController - (void)viewDidLoad { [super viewDidLoad]; self.mapView.delegate=self; } #pragmark - BMKMapViewDelegate /** *长按地图时调用 * @param mapView 地图 * @param coordinate点对应的经纬度 */ -(void)mapview:(BMKMapView*)mapView onLongClick:(CLLocationCoordinate2D)coordinate{ //调整地图显示区域 BMKCoordinateSpanspan = BMKCoordinateSpanMake(0.075418,0.051922); BMKCoordinateRegionregion = BMKCoordinateRegionMake(coordinate, span); [mapViewsetRegion:regionanimated:YES]; //poi检索 [[TSYBaiduToolsharedTSYBaiduTool]getPoiWithCeneter:coordinatekey:@"小吃"Result:^(NSArray *result) { [resultenumerateObjectsUsingBlock:^(BMKPoiInfo*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) { //添加大头针 [[TSYBaiduToolsharedTSYBaiduTool]addAnnotationCenter:obj.pttitle:obj.namesubTitle:obj.addresstoMapView:self.mapView]; }]; }]; } @end