touchesBegan没有在UITableView上工作

时间:2014-06-28 06:18:35

标签: ios objective-c uitableview touch

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

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

为此,我尝试了

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

但是这个方法没有被调用。

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

4 个答案:

答案 0 :(得分:1)

如果您只想在点击任何单元格时显示 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]];

答案 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)

如果是UIScrollviewUITableView,则触摸方法不会被触发。请在Responder Chain上阅读更多内容。 要获得所需的输出,您必须使用子类UITableViewUITableCellView并覆盖[hitTest:withEvent:][pointInside:withEvent:]以获取相应视图中的CGPoint。 您可以阅读更多here

答案 3 :(得分:0)

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