之前做一个项目时,碰到一个问题,为一个UITableViewCell中的不同按钮绑定不同的对象,点击按钮后获取绑定的相应的对象。目前我所知道的有两种方式可以实现该需求。1.使用IOS提供的运行时 2.之定义UIButton,为其设置属性。下面介绍第一种方式:
一、使用运行时必须首先导入:
#import "objc/runtime.h"
二、绑定对象:
objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>);这个方法可以让一个对象和另一个对象关联,就是说一个对象可以保持对另一个对象的引用,并获取那个对象。参数分别表示:关联的源对象、与对象关联的键、关联键的值、关联的协议。关联协议可以参考objc_AssociationPolicy,关联的键一般是地址如:static char operationKey; 使用&operationKey作为键。值得类型是id。
三、获取绑定的对象:
objc_getAssociatedObject(<#id object#>, <#const void *key#>);
四、实例应用,为UIButton绑定值:
//绑定值或对象
static const char * const kZSYPopoverListButtonClickForCancel = "kZSYPopoverListButtonClickForCancel";
objc_setAssociatedObject(self.cancelButton, kZSYPopoverListButtonClickForCancel, [block copy], OBJC_ASSOCIATION_RETAIN);
//获取值或者对象
UIButton *button = (UIButton *)sender;
block = objc_getAssociatedObject(sender, kZSYPopoverListButtonClickForCancel);