2

我想在一个视图中同时使用点击手势和长按手势。但我的问题是我无法在点击时运行点击手势动作。但长按手势工作正常。

这是代码片段。

            UILongPressGestureRecognizer *longPressGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(ontappLongPressGesture:)];
            longPressGesture.minimumPressDuration=0.6;

            longPressGesture.delegate=self;
            [cell.view addGestureRecognizer:longPressGesture];

            UITapGestureRecognizer *gesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellSelected:)];
            //[gesture requireGestureRecognizerToFail:longPressGesture]; //I have tried with this line also but not working
            gesture.delegate=self;
            [cell.view addGestureRecognizer:gesture];

我也设置了委托方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}

长按时会调用此方法

- (void)ontappLongPressGesture:(id)sender{

    //Long press code here

}

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

-(void)cellSelected:(id)sender {

     //Single tap code here

}
4

2 回答 2

4

您尚未指定将这些手势识别器放在哪种类型的视图上,但是由于您将其称为“单元格”,因此我假设它位于 UITableView 上?

如果是这样,您需要确保设置cancelsTouchesInView标志:

gesture.cancelsTouchesInView=NO;
于 2013-07-28T20:07:44.417 回答
2

您要么需要使用这两种方式之一。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // test if our control subview is on-screen
    if (cell.view.superview != nil) {
        if ([touch.view isDescendantOfView:cell.view]) {
            // we touched our control surface
            return YES; // handle the touch
        }
    }
    return NO; // ignore the touch
}

在这里,您需要指定要使用gestureRecognizer 的视图。

或者你也可以使用这些代码行

gesture.cancelsTouchesInView = NO; 
longPressGesture.cancelsTouchesInView = NO;

希望它会帮助你。

于 2013-07-31T06:07:20.143 回答