码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发——项目实用技术OC篇&将Block作为代理来使用,实现传值

时间:2015-09-25 07:05:22      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

将Block作为代理来使用,实现传值

 


在这里http://www.cnblogs.com/iCocos/p/4659878.html,笔者已经将代理,Block,通知传值的方式总结了一下,今天使用的不一样,我们这里使用的是在一个方法中将一个block代码保存起来,再回到blcok内部去执行。

  • 这里使用的是在地图中,,,,好了不多说,开干

 

1:首先,定义一个blcok

typedef void(^ResultBlock)(CLLocation *currentLoc, CLPlacemark *placemark, NSString *error);


2.声明一个带Block块的方法,方便外面调用并且传入block代码块

1 /**
2  *  获取当前位置
3  *
4  *  @param block 获取当前位置后处理的block
5  */
6 - (void)getCurrentLocation:(ResultBlock)block;


3.在实现文件中定义一个blcok属性,用语纪录后面方法中传入的block,并且执行

// 存储外界传递的代码块
@property (nonatomic, copy) ResultBlock resultBlock;


4.实现Block对应的方法

 1 // 获取当前位置
 2 - (void)getCurrentLocation:(ResultBlock)block
 3 {
 4     // 记录代码块
 5     self.resultBlock = block;
 6 
 7 
 8     // 判断是否开启定位服务
 9     if ([CLLocationManager locationServicesEnabled]) {
10         // 开始更新用户位置
11         [self.locationM startUpdatingLocation];
12     }
13     else
14     {
15         self.resultBlock(nil, nil, @"定位服务未开启");
16     }
17 }


5.在需要执行代码块的位置判断并且执行外部传入的block(这里跟上面提到的文章中的实现时一样的)

        if (self.resultBlock) {
            self.resultBlock([locations lastObject], [placemarks firstObject], nil);
        }


6,外面使用的时候直接跟使用UIView动画一样,在后面会附加一个blcok,我们只需要在这个blcok里面实现对应的代码,系统会自动将这段代码先保存,再放到blcok内部去执行

1     [[iCocosLocationTool sharediCocosLocationTool] getCurrentLocation:^(CLLocation *currentLoc, CLPlacemark *placemark, NSString *error) {
2         if ([error length] == 0) {
3             NSLog(@"%@   ----   %@", currentLoc, placemark.name);
4         }
5     }];

 



 

iOS开发——项目实用技术OC篇&将Block作为代理来使用,实现传值

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4837009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!