自定义的uitableviewcell里面的button不起作用

我有一个自定义TableCell和一个UiButton通过IB关联。 但button操作方法总是返回button索引为零

以下是我的代码

//Inside CellForRow [cell.M_CtrlBtnChat addTarget: self action: @selector(buttonPressed:withEvent:) forControlEvents: UIControlEventTouchUpInside]; - (void) buttonPressed: (id) sender withEvent: (UIEvent *) event { UITouch * touch = [[event allTouches] anyObject]; CGPoint location = [touch locationInView: self.tableView]; NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; NSLog(@"%d", indexPath.row); } 

这里索引path总是返回零。 任何想法 。 请帮帮我

 [cell.M_CtrlBtnChat addTarget: self action: @selector(buttonPressed:withEvent:) forControlEvents: UIControlEventTouchUpInside]; cell.M_CtrlBtnChat.tag = indexPath.row; - (void) buttonPressed: (id) sender withEvent: (UIEvent *) event { UIButton *btn = (UIButton *)sender; NSLog(@"btn.tag %d",btn.tag); UITouch * touch = [[event allTouches] anyObject]; CGPoint location = [touch locationInView: self.tableView]; NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; NSLog(@"%d", indexPath.row); } 

试试这可能会帮助你。

 - (void) buttonPressed: (id) sender withEvent: (UIEvent *) event { CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.mMessagesTable]; NSIndexPath *indexPath = [self.mMessagesTable indexPathForRowAtPoint:touchPoint]; NSLog(@"%d", indexPath.row); } 

代码button编程

 UIButton *mNewMsgDwn = [UIButton buttonWithType:UIButtonTypeCustom]; [mNewMsgDwn setImage:[UIImage imageNamed:@"new_message.png"] forState:UIControlStateNormal]; [mNewMsgDwn addTarget:self action:@selector(newMsg) forControlEvents:UIControlEventTouchUpInside]; mNewMsgDwn.frame = CGRectMake(179, 357, 137, 27); [self.view addSubview:mNewMsgDwn]; 

我有同样的问题,并尝试了一切。 终于做到这一点的东西正在实施的方法

 (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

只要返回你的自定义单元格的高度(查看NIB文件)

试用这个波纹pipe代码

 - (void) buttonPressed: (id) sender withEvent: (UIEvent *) event { UIButton *button = (UIButton *)sender; UITableViewCell *cell = (UITableViewCell *)button.superview; UITableView *tableView = (UITableView *)cell.superview; NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; NSLog(@"%d", indexPath.row); } 

要么

 UIButton *button = (UIButton *)sender; CGRect buttonFrame = [button convertRect:button.bounds toView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonFrame.origin]; 

以编程方式在单元格中添加自定义button的整个示例

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ....... cell.textLabel.text = [NSString stringWithFormat:@"Cell #%i", indexPath.row + 1]; //Create the button and add it to the cell UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button addTarget:self action:@selector(customActionPressed:) forControlEvents:UIControlEventTouchDown]; [button setTitle:@"Custom Action" forState:UIControlStateNormal]; button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f); [cell addSubview:button]; return cell; } 

并获得索引path与波纹pipe代码…

 //Get the superview from this button which will be our cell UITableViewCell *tblCell = (UITableViewCell*)[sender superview]; //From the cell get its index path. NSIndexPath *indexPathE = [myTableView indexPathForCell:tblCell]; NSLog(@"%d", indexPathE.row);