iOS 原生的 UIButton 点击事件是不允许带多参数的,唯一的一个参数就是默认UIButton本身
那么我们该怎么实现传递多个参数的点击事件呢?
1.如果业务场景非常简单,要求传单参数并且是整数类型,可以用tag
[cell.deleteButton setTag:indexPath.row]; //例如,将cell的行数设置成tag
2.利用ObjC关联,runtime之所以被称为iOS 的动态特性是有道理的,当然关联甚至可以帮助NSArray等其他对象实现“多参数传递”
实现起来也非常简便:
UIButton *btn = // create the button
objc_setAssociatedObject(btn, "firstObject", someObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC); //实际上就是KVC
objc_setAssociatedObject(btn, "secondObject", otherObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
- (void)click:(UIButton *)sender
{
id first = objc_getAssociatedObject(btn, "firstObject"); //取参
id second = objc_setAssociatedObject(btn, "secondObject");
// etc.
}
3.利用自定义,添加一个多参数的字典属性变量即可(为什么要字典?可以装多多的)
自定义Button子类,甚至都不用重写啥的:
@interface MultiParamButton : UIButton
@property (nonatomic, strong) NSDictionary* multiParamDic;
@end
NSDictionary* paramDic = @{@"one":@"one", @"two":@2, @"third":@(3)};