touchesBegan没有在UITableView上工作

我在整个屏幕上都有UITableView 。 我想知道的是找到我点击单元格的位置。

我想要做的是在单击任何单元格时显示复制选项。

为此我试过了

 - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { //some code } 

但这种方法没有被调用。

任何想法如何通过UITableView找到用户触摸

如果您只想在单击任何单元格时显示“ Copy选项,则必须执行此操作

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

tableView的方法。 没有必要使用Touch event

使用此方法,您可以使用indexPath获取所选单元格的副本。

编辑

要获取所选单元格的位置,可以使用rectForRowAtIndexPath方法

 CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath]; 

EDIT2

 CGRect rectInSuperview = [tableView convertRect:rectInTableView toView:[tableView superview]]; 

您无法在UITableView上检测到触摸位置。 对于检测,有两种选择。

 1. Either subclass your `UITableView` 

要么

 2. Add a `UIPanGesture` explicitly in the view. 

UITableView默认inheritancepan手势和UIScrollView的属性。 因此,通过子类化,您可以覆盖手势方法并检测UITouchEvents并根据您的位置显示copy选项。 如果要在UITableView上添加UIPanGesture ,则必须在UIViewController添加此方法并检测UIPanGesture触摸事件。

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 

和你的UIPanGesture选择器方法如下:

 -(void) slideView: (UIPanGestureRecognizer *) recognizer { switch (recognizer.state) { case UIGestureRecognizerStateBegan: CGPoint touchLocation =[recognizer locationInView:self.yourTableViewReference]; //Your Rest Of The Code. break; case UIGestureRecognizerStateChanged: break; case UIGestureRecognizerStateEnded: break; default: break; } } 

希望它能帮到你。

对于UIScrollviewUITableView ,触摸方法不会被触发。 请阅读有关响应者链的更多信息。 要获得所需的输出,您必须使用子类UITableViewUITableCellView并覆盖[hitTest:withEvent:][pointInside:withEvent:]以在相应的视图中获取CGPoint 。 你可以在这里阅读更多。

使用隐藏的副本按钮创建自定义uitableview,并实现委托方法didSelectRowAtIndexPath,然后在行选择的基础上取消隐藏复制按钮。