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