UITextField添加Block

来源:互联网 发布:学哪种编程语言好? 编辑:程序博客网 时间:2024/05/16 12:53

1、问题描述

UITextField添加Block

2、问题解决

Demo链接:demo下载地址
使用方法:

    [self.zTextField addAction:^(UITextField *tf) {        self.zLabel.text = tf.text;    } forControlEvents:UIControlEventEditingChanged];

效果如图:
这里写图片描述

3、具体如下

添加UITextfield的Category
UITextField+Block.h

typedef void(^TextFieldBlock)(UITextField* tf);@interface UITextField (Block)- (void)addAction:(TextFieldBlock)block;- (void)addAction:(TextFieldBlock)block forControlEvents:(UIControlEvents)controlEvents;@end

UITextField+Block.m

#import <objc/runtime.h>@implementation UITextField (Block)static char tfActionTag;- (void)addAction:(TextFieldBlock)block{    objc_setAssociatedObject(self, &tfActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC);    [self addTarget:self action:@selector(action:) forControlEvents:UIControlEventEditingChanged];}- (void)addAction:(TextFieldBlock)block forControlEvents:(UIControlEvents)controlEvents{    objc_setAssociatedObject(self, &tfActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC);    [self addTarget:self action:@selector(action:) forControlEvents:controlEvents];}- (void)action:(id)sender{    TextFieldBlock blockAction = (TextFieldBlock)objc_getAssociatedObject(self, &tfActionTag);    if (blockAction)    {        blockAction(self);    }}@end

4、知识点描述

①添加分类
②利用o-c的动态特性,进行关联

OC中的关联就是在已有类的基础上添加对象参数。来扩展原有的类,需要引入objc/runtime.h头文件。
关联是基于一个key来区分不同的关联。
常用函数: objc_setAssociatedObject 设置关联
objc_getAssociatedObject 获取关联
objc_removeAssociatedObjects 移除关联

0 0
原创粉丝点击