在UITableView或UICollectionView的自定义的cell里添加手势或button时,有时会可能会需要用到选中的cell需要传出cell的位置,下面就两种情况给出解释
一:button响应方法如何传参
方法1,用代理
@protocol CustomCellProtocol - (void)customCell:(CustomCell *)cell didTapButton:(UIButton *)button; @end
将UIButton的响应加在CustomCell文件中,比如这个响应叫做 那么在点击button时,就会调用这个方法。这个方法可以实现如下, { if ([self.delegate respondsToSelector:@selector(customCell:didTapButton:)]) { [self.delegate performSelector:@selector(customCell:didTapButton:) withObject:self withObject:self.button]; } } 然后在UIViewController里实现代理方法,这样,就能获得这个UIButton所在的UITableViewCell。- (IBAction)buttonTarget:(id)sender;
方法2,自定义一个button,给button个属性,
[button addTarget:selfaction:@selector(btnMethod:)forControlEvents:UIControlEventTouchUpInside];
[button setTag:j];
[button setTestStr:@"我是测试信息么么哒"];
///button的点击方法
- (void)btnMethod:(YBCustomButton *)sender
{
/**
* button响应点击方法传入参数,传入的是tag
*/
NSInteger i = [sender tag];
NSString *string = sender.testStr;
NSLog(@"..................%ld",(long)i+1);
NSLog(@"...%@",string);
}
二、手势响应方法时如何传参
步骤:
1、自定义手势
@interface YBCustomGesture : UITapGestureRecognizer
@property (nonatomic)NSInteger tag;
@end
2、调用属性的set方法
YBCustomGesture *labelGesture = [[YBCustomGesture alloc]initWithTarget:self action:@selector(labelTest:)];
[labelGesture setTag:i];
3、//label的添加的点击手势方法
- (void)labelTest:(YBCustomGesture *)sender
{
/**
* 用自定义的UIGestureRecognizer来传递参数,达到传参目的。
*/
NSInteger integer = sender.tag;
NSLog(@"+++++++%ld",(long)integer);
}