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; } }
希望它能帮到你。
对于UIScrollview
或UITableView
,触摸方法不会被触发。 请阅读有关响应者链的更多信息。 要获得所需的输出,您必须使用子类UITableView
和UITableCellView
并覆盖[hitTest:withEvent:]
和[pointInside:withEvent:]
以在相应的视图中获取CGPoint
。 你可以在这里阅读更多。
使用隐藏的副本按钮创建自定义uitableview,并实现委托方法didSelectRowAtIndexPath,然后在行选择的基础上取消隐藏复制按钮。