允许UITableViewCell上的手势进入底层视图

时间:2016-05-10 06:02:52

标签: ios objective-c swift uitableview uigesturerecognizer

我遇到了允许UITableViewCell上的手势(特别是平移手势)落到底层视图的问题。我已经尝试将关联的UITableViewCell的userInteractionEnabled标志设置为false,但手势仍然没有通过UITableViewCell到达基础视图。

以下是我的故事板

enter image description here

如何让UITableViewCell中的手势落到其底层视图?

3 个答案:

答案 0 :(得分:0)

您可以使用gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch委托方法。只要有手势识别,就会调用此方法。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {   
    if ([touch.view isDescendantOfView:self.button1]) {
        // Perform the required operation here
    }

return YES;

}

您可以这样检查:

    if ([touch.view isDescendantOfView:self.tableView]) {
        return NO;
    }

答案 1 :(得分:0)

UITableViewUIScrollView的子类。在UIScrollView中,我找到了两个手势识别器panGestureRecognizerpinchGestureRecognizer。但我认为禁止这样做是不好的,因为这会导致你的表视图无法再滚动。我建议你去KVO那个属性并获取触摸事件并处理你自己的事情(或添加新动作?)。

答案 2 :(得分:0)

我为long press event添加了UITableViewCell,如下所示。

可能会帮助您解决问题。

-(void)viewDidLoad {

    [super viewDidLoad];
    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    [longPressGestureRecognizer setDelegate:(id)self];
    [self.tableView addGestureRecognizer:longPressGestureRecognizer];
}

然后处理action,如下所示。

- (void)handleLongPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer {

    CGPoint point = [longPressGestureRecognizer locationInView:self.tableView];
    NSIndexPath * indexPathForSelectedRow = [self.tableView indexPathForRowAtPoint:point];

    if (indexPathForSelectedRow != nil && longPressGestureRecognizer.state == UIGestureRecognizerStateBegan) {
        // Write your code here
    }
}