我在UIButton
添加了UITableViewCells
。我有用户单击按钮时,我们已获取索引路径以使用NSMutableArray
中的值。我已使用以下内容获取当前IndexPath
,
[getMeButton addTarget:self action:@selector(resendTheErrorMessage:) forControlEvents:UIControlEventTouchUpInside];
-(void) resendTheErrorMessage:(id)sender
{
NSLog(@"SEnder: %@", sender);
//NSLog(@"Index Path : %@", indexpath);
}
任何人都可以帮我传递当前的indexpath UIButton's
@selector。提前致谢。
修改
这是我从NSLog()
<UIButton: 0x864d420; frame = (225 31; 95 16); opaque = NO; tag = 105; layer = <CALayer: 0x864d570>>
答案 0 :(得分:30)
添加您的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];
}
注意: 当您的tableView只有1个部分时,上述解决方案将有效。如果您的tableView有多个部分,您应该知道您的部分索引或者使用以下方法。
<强>替代: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];
答案 1 :(得分:6)
鉴于按钮是单元格视图的子视图,并且表视图知道单元格视图的索引路径,这样的东西可以工作:
- (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);
}
}
答案 2 :(得分:2)
如果您只需要表格行,则可以将按钮的标签属性设置为行号。如果您需要整个路径(带有节号),那么您将必须子类化UIButton并创建一个新属性(“indexPath”将是一个好名称),您将该按钮添加到表行时将设置。
答案 3 :(得分:2)
对于包含多个部分的tableview,更简单的解决方案是分配标记:
cell.button.tag = indexPath.section * 1000 + indexPath.row
在事件处理程序中使用:
let section = sender.tag / 1000
let row = sender.tag % 1000
请注意,如果您的任何部分可以包含1000行或更多行,则需要乘以大于1000的数字。
答案 4 :(得分:0)
对我有效
cell.button.tag = indexPath.row;
并在单元格类中获取标记...例如:
NSLog(@"tag number is = %d",[sender tag]);
你可以知道cell.row。 这对我有用,对不起我的英语。