[iOS] 在category中使用block
来源:互联网 发布:男生瘦脸 知乎 编辑:程序博客网 时间:2024/06/05 04:51
在分类中使用属性block
通过分类我们可以为iOS UIKit 的常用控件添加方法,如果想添加属性怎么办呢,如果我们采用常规的方法定义属性,XCode会提示一下错误:
解决这个问题可以通过OC的runtime。
如果不写@dynamic block;
就会报上面的错误。
@dynamic 就是要告诉编译器,代码中用@dynamic修饰的属性,其getter和setter方法会在程序运行的时候或者用其他方式动态绑定,以便让编译器通过编译。这个跟@synthesize自动合成属性的getter/setter方法原理是不一样的。
#import <UIKit/UIKit.h>typedef void(^doneBlock)();@interface UIToolbar (STBar)/** * 点击完成按钮的回调 */@property (nonatomic,copy) doneBlock block;/** * 创建带完成按钮的方法 */- (void)createDoneButtonBar;@end
对应的实现文件中对block属性通过objc_getAssociatedObject和objc_setAssociatedObject方法进行绑定。
#import "UIToolbar+STBar.h"#import <objc/runtime.h>static const void *UtilityKey = &UtilityKey;@implementation UIToolbar (STBar)@dynamic block;- (doneBlock)block { return objc_getAssociatedObject(self, UtilityKey);}- (void)setBlock:(doneBlock)block{ objc_setAssociatedObject(self, UtilityKey, block, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}- (void)createDoneButtonBar { UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(doneAction:)]; UIBarButtonItem *space=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil]; [space setWidth:250]; [self setItems:@[space,done]];}- (void)doneAction:(UIButton *)button { if (self.block){ self.block(); }else{ [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; }}
0 0
- [iOS] 在category中使用block
- 如何在iOS中使用Block
- 如何在iOS中使用Block
- 如何在iOS中使用Block
- 如何在IOS中使用block
- 如何在 iOS 5 中使用 Block
- 如何在iOS中使用Block
- 如何在iOS中使用Block
- 如何在iOS中使用Block
- 如何在iOS中使用Block
- 如何在iOS中使用 block
- 如何在iOS中使用Block
- ios 中使用 block
- iOS中-Block使用
- iOS中-Block使用
- ios Category 和 extension 区别,Category中使用属性
- 如何在 iOS 5 中使用 Block (1)
- 如何在 iOS 5 中使用 Block (2)
- 表单流程中一个节点是多人共同执行,每个执行人可以选择下一步要执行人员的实现思路
- 卷积和池化的总结
- 如何添加 .PCH OR PREFIX.PCH 文件到 XCODE 6?
- 使用”git init”和使用”git init –bare”的区别
- 杂记:java 并发 的东东
- [iOS] 在category中使用block
- 两栏自适应布局
- Android自定义View之圆形ImageView--RoundImageView
- Reverse String
- MD5加密工具类
- 解决“只能通过Chrome网上应用商店安装该程序”的方法
- 自学自定义view--画虚线
- 个人学习-java-集合的概述
- nyoj_33 蛇形填数