检测到TableView上的触摸并仍然能够滚动

时间:2015-08-04 11:31:14

标签: ios objective-c uitableview touchesbegan

我需要能够检测到立即触摸并获得其位置。 (所以doSelectRowAtIndexPath无法帮助我们,因为它在快速上下滚动时不会立即动作,你需要呼吸并逐个选择)

已经尝试过我能想到的一切。在每个单元格中开始的触摸不起作用,因为它在自定义单元格类中实现时突然表现得像didSelectRowIndexPath。与TableViewController相同的结果,触摸的性质开始(你触摸它,立即响应)只是赢了工作。

*我没有尝试过TAP。需要能够获得触摸(TapGesture在非常小心地/缓慢地滑动时没有响应但是触摸开始总是这样做)*

3 个答案:

答案 0 :(得分:0)

不确定这是您需要的,但您可以创建TapGestureRecognizer

您可能会遇到与UITableView自己的手势识别器的冲突,但有一些机制可以解决这些问题,希望能让您实现所需的行为(查找requireGestureRecognizerToFailUIGestureRecognizerDelegate的{​​{{ 1}}和gestureRecognizerShouldBegin)。

答案 1 :(得分:0)

试试这个。

在cellForIndexpath方法中。

      UITapGestureRecognizer *singleFingerTap =
            [[UITapGestureRecognizer alloc] initWithTarget:self
                                                    action:@selector(handleSingleTap:)];
            singleFingerTap.delegate=self;
            cell.contentView.tag=indexPath.row;
            [cell.contentView addGestureRecognizer:singleFingerTap];



//The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
    NSLog(@"%ld",(long)recognizer.view.tag);   
}

答案 2 :(得分:0)

我认为您需要做什么,将UILongPressGestureRecognizer添加到tableview,因此正常触摸将滚动并长按将执行您想要的任何操作。将其minimumPressDuration设置为0.2,这样就不会花费太多时间。为UILongPressGestureRecognizer添加操作,并在该方法中获取如下位置:

CGPoint touchPointInView = [sender locationInView: self.view]; //location reespective to view
CGPoint touchPointInView1 = [sender locationInView: tableView]; //location respective to tableview