如何通过iOS中的参数将UITableView IndexPath传递给UIButton @selector?

我在UITableViewCells添加了UIButton 。 我有当用户点击button我们已经得到的indexpath使用NSMutableArray的值。 我用下面的来获取当前的IndexPath

 [getMeButton addTarget:self action:@selector(resendTheErrorMessage:) forControlEvents:UIControlEventTouchUpInside]; -(void) resendTheErrorMessage:(id)sender { NSLog(@"SEnder: %@", sender); //NSLog(@"Index Path : %@", indexpath); } 

任何人都可以请帮助我通过当前的indexpath UIButton's 。 提前致谢。

编辑:

这是我从NSLog()获得的输出

 <UIButton: 0x864d420; frame = (225 31; 95 16); opaque = NO; tag = 105; layer = <CALayer: 0x864d570>> 

像这样添加你的UIButton

 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [btn setFrame:CGRectMake(10.0, 2.0, 140.0, 40.0)]; [btn setTitle:@"ButtonTitle" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [btn setTag:indexPath.row]; [cell.contentView addSubview:btn]; 

然后得到它的标签号码 –

 -(void)buttonClicked:(id)sender { NSLog(@"tag number is = %d",[sender tag]); //In this case the tag number of button will be same as your cellIndex. // You can make your cell from this. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[sender tag] inSection:0]; UITableViewCell *cell = [tblView cellForRowAtIndexPath:indexPath]; } 

注: 以上解决scheme将工作时,你的tableView只有1节。 如果你的tableView有多个部分,你应该知道你的部分索引或去下面的方法。

替代scheme:1

 UIView *contentView = (UIView *)[sender superview]; UITableViewCell *cell = (UITableViewCell *)[contentView superview]; NSIndexPath *indexPath = [tblView indexPathForCell:cell]; 

备选:2

 CGPoint touchPoint = [sender convertPoint:CGPointZero toView:tblView]; NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:touchPoint]; UITableViewCell *cell = [tblView cellForRowAtIndexPath:indexPath]; 

假定button是单元格视图的子视图,并且表格视图知道单元格视图的索引path,则类似这样的工作:

 - (UITableViewCell *)containingCellForView:(UIView *)view { if (!view.superview) return nil; if ([view.superview isKindOfClass:[UITableViewCell class]]) return (UITableViewCell *)view.superview; return [self containingCellForView:view.superview]; } - (IBAction)buttonClicked:(id)sender { UITableViewCell *containingCell = [self containingCellForView:sender]; if (containingCell) { NSIndexPath *indexPath = [self.tableView indexPathForCell:containingCell]; NSLog(@"Section: %i Row: %i", indexPath.section, indexPath.row); } } 

如果您只需要表格行,那么您可以将button的标签属性设置为行号。 如果你需要整个path(带节号),那么你将不得不inheritanceUIButton并创build一个新属性(“indexPath”将是一个好名字),当你将该button添加到表格行时,你将设置一个新的属性。

对于具有多个部分的tableview,更简单的解决scheme是分配标签:

 cell.button.tag = indexPath.section * 1000 + indexPath.row 

在事件处理程序中使用:

 let section = sender.tag / 1000 let row = sender.tag % 1000 

请注意,如果任何部分可以包含1000或更多行,则需要乘以大于1000的数字。

对我来说,如果在cellForRowAtIndexPath中添加标签button

 cell.button.tag = indexPath.row; 

并在单元格类中获取标签…例如:

  NSLog(@"tag number is = %d",[sender tag]); 

你可以知道cell.row。 以及这对我的作品,对不起,我的英语。