写代码的过程中遇到需要将参数传入到代理方法中去的情况,在网上搜索了一下,现在整理下可以用到的方法。
通常我们需要在下面的alertView代理方法中处理Button点击事件。
-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{}
如果此时想传入参数到这个方法中,然后再做相应的处理。
我们可以选用的方法有:
①如果需要传入的参数比较简单可以转化为整数类型,那么可以选择将这个参数置为alertView的tag。
②考虑将参数设为全局变量或成员变量。
③利用对象关联(associated objects)(此方法不推荐使用),具体做法如下:
首先,#import<objc/runtime.h> 头文件
设置关联:objc_setAssociatedObject来把一个对象与另外一个对象进行关联。
void objc_setAssociatedObject(id object,const void* key,id value,objc_AssociationPolicy policy);
四个参数:object :源对象(此处为alert对象)
key :关联的关键字
value :关联的对象
policy :关联策略。
获取相关联的对象: objc_getAssociatedObject(用于在代理方法中获取对象)
id objc_getAssociatedObject(id object, void *key);
④扩展NSObject,加个userInfo。