didSelectRowAtIndexPath UIButton

时间:2012-08-14 11:17:10

标签: objective-c ios cocoa-touch uitableview

  

可能重复:
  Detecting which UIButton was pressed in a UITableView

我在UITableViewCell中添加了一个UIButton 我希望这个按钮调用我已经知道的关于调用

的“didSelectRowAtIndexPath”
  [self tableView:self.tableView didSelectRowAtIndexPath:indexpath];

但问题是我无法获取indexpath并尝试了

[self.Tableview indexPathForRowAtPoint:[self.view convertPoint:[sender center] fromView:self.Tableview]]

方法,但它返回相同的CGPoint,任何帮助?

2 个答案:

答案 0 :(得分:4)

首先,您不应该直接致电didSelectRowAtIndexPath。它是一个委托方法,表视图应该调用它。

相反,请创建一个单独的方法来执行您想要执行的操作,并从didSelectRowAtIndexPath调用该方法。

其次,您可以像这样获取索引路径:

UIButton* button = (UIButton*) sender;
UITableViewCell *cell = (UITableViewCell*)button.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

这是有效的,因为如果所有内容都以标准方式设置,则按钮的超级视图应该是单元格的contentView,这应该是单元格的子视图。

答案 1 :(得分:0)

根据我的最佳方式是给 ROW NUMBER AS TAG VALUE FOR tableViewCell'按钮, 因此,当您点击按钮时,将调用其操作,您将从中获取发件人ID sender_id只是UIButton实例,获取其标记值..

例如:你有UIButton * testButton;
    它的选择器是@selector(testButtonPressed :)

因此,当按下tableViewCell的Button时,它将调用@selector(testButtonPressed :)

-(void)testButtonPressed:(id)sender
 {
     NSLog(@"index is %d", sender. tag);
 }