如何检测精确选择了哪个单元格的按钮

时间:2014-12-04 09:33:51

标签: ios xcode uitableview interface-builder

假设我有自定义UITableViewCell包含UIButton控件。当用户按下按钮时,它应该根据选择的单元格呈现另一个具有相应信息的视图控制器(更确切地说,我有一组用于表示UITableView中的信息的对象,我想转移这个信息到下一个视图控制器)。问题是如何检测确切选择了哪个单元格的按钮?

提前致谢。

3 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点..但是自iOS8以来,superView的方式已经不再可用了。我正在共享一个在所有iOS中都运行良好的代码。

在cellForRow方法上编写此选择器

[cell.btnOnCell addTarget:self action:@selector(btnAction:event:) forControlEvents:UIControlEventTouchUpInside];

现在写下这个方法

-(void)btnAction: (UIButton *)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tblView];
    NSIndexPath *indexPath = [self.tblView indexPathForRowAtPoint:currentTouchPosition];
    NSLog(@"%li",(long)indexPath.row);
}

答案 1 :(得分:0)

试试这个:

在cellForRowAtIndexpath

中插入以下代码
[cell.yourbuttonName addTarget:self action:@selector(yourbuttonNamePressed:) forControlEvents:UIControlEventTouchDown];

将以下代码粘贴为单独的方法

- (void)yourbuttonNamePressed:(UIButton *)sender
{
CGPoint swipepoint = sender.center;
CGPoint rootViewPoint = [sender.superview convertPoint:swipepoint toView:self.goalsTable];
NSIndexPath *indexPath = [self.goalsTable indexPathForRowAtPoint:rootViewPoint];
}

答案 2 :(得分:0)

简单的解决方案是,当您在CellForRowAtIndexPath中配置单元格时,您需要设置cell.button.tag = 100 + indexPath.row。

-(void)btnClicked:(UIButton *)sender
{
NSIndexPath* path= [NSIndexPath indexPathForRow:sender.tag-100 inSection:0];
UITableViewCell*cell=(UITableViewCell *)[tblView cellForRowAtIndexPath:path];
}

注意:您需要从UITableviewcell中删除addTarget和buttonClicked实现 并在cellForRowAtIndexPath方法中将addtarget添加到按钮,并在此类中实现buttonClicked方法。**