UIAlertView的擴展
.h文件
import <UIKit/UIKit.h>
typedef void (^successBlock)(NSInteger buttonIndex);
@interface UIAlertView (Block)<UIAlertViewDelegate>
- (void)showWithBlock:(successBlock)block;@end
.m文件
import "UIAlertView+Block.h"
import <objc/runtime.h>
static const char alertKey;
@implementation UIAlertView (Block)
- (void)showWithBlock:(successBlock)block{
if (block) {
objc_setAssociatedObject(self, &alertKey, block,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
self.delegate = self;
}
[self show];
} - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
successBlock block = objc_getAssociatedObject(self, &alertKey); block(buttonIndex);
}
@end
UIButton的擴展
.h文件
import <UIKit/UIKit.h>
typedef void (^btnBlock)();
@interface UIButton (Block)
- (void)handelWithBlock:(btnBlock)block;
@end
.m文件
import "UIButton+Block.h"
import <objc/runtime.h>
static const char btnKey;
@implementation UIButton (Block)
- (void)handelWithBlock:(btnBlock)block{
if (block) {
objc_setAssociatedObject(self, &btnKey, block, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
[self addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];
} - (void)btnAction{
btnBlock block = objc_getAssociatedObject(self, &btnKey);
block();
}
@end
tips: 使用objc_setAssociatedObject烈涮,需要引入頭文件#import <objc/runtime.h>
void objc_setAssociatedObject(id object, const void key, id value, objc_AssociationPolicy policy);
id objc_getAssociatedObject(id object, const void key);
這兩個方法可以讓一個對象和另一個對象關(guān)聯(lián),就是說一個對象可以保持對另一個對象的引用,并獲取那個對象闷串。有了這些刨裆,就能實現(xiàn)屬性功能了奥邮。 policy可以設(shè)置為以下這些值:
enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01
OBJC_ASSOCIATION_COPY = 01403};