我在整个屏幕上都有UITableView
。我想知道的是找到我点击单元格的位置。
我想要做的是在点击任何单元格时显示复制选项。
为此,我尝试了
- (void) touchesEnded:(NSSet *)touches
withEvent:(UIEvent *)event {
//some code
}
但是这个方法没有被调用。
任何想法如何找到用户触摸UITableView
答案 0 :(得分:1)
如果您只想在点击任何单元格时显示 Copy
选项,那么您必须选择
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
tableView的方法。无需使用 Touch event
。
使用此方法,您可以使用 indexPath 获取所选单元格的副本。
要获取所选单元格的位置,您可以使用 rectForRowAtIndexPath
方法
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath];
CGRect rectInSuperview = [tableView convertRect:rectInTableView toView:[tableView superview]];
答案 1 :(得分:1)
您无法在UITableView
上检测到触摸位置。对于检测,有两种选择。
1. Either subclass your `UITableView`
2. Add a `UIPanGesture` explicitly in the view.
UITableView
默认继承pan手势和UIScrollView
的属性。因此,通过对其进行子类化,您可以覆盖手势方法并检测UITouchEvents
,并根据您的位置显示copy
选项。如果您要在UIPanGesture
添加UITableView
,则必须在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;
}
}
希望它对你有所帮助。
答案 2 :(得分:1)
如果是UIScrollview
或UITableView
,则触摸方法不会被触发。请在Responder Chain上阅读更多内容。
要获得所需的输出,您必须使用子类UITableView
和UITableCellView
并覆盖[hitTest:withEvent:]
和[pointInside:withEvent:]
以获取相应视图中的CGPoint
。
您可以阅读更多here。
答案 3 :(得分:0)
使用隐藏副本按钮创建自定义uitableview并实现委托方法didSelectRowAtIndexPath,然后根据行选择取消隐藏复制按钮。