Iphone 轻触手势+;长按手势都不起作用

Iphone 轻触手势+;长按手势都不起作用,iphone,ios,ios4,uigesturerecognizer,Iphone,Ios,Ios4,Uigesturerecognizer,我想在视图中同时使用点击手势和长按手势。但我的问题是,我不能在水龙头上运行水龙头手势动作。但长时间的施压姿态效果不错 下面是代码片段 UILongPressGestureRecognizer *longPressGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(ontappLongPressGesture:)]; longPressGe

我想在视图中同时使用点击手势和长按手势。但我的问题是,我不能在水龙头上运行水龙头手势动作。但长时间的施压姿态效果不错

下面是代码片段

            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

}
但这种方法不会在tap上被调用

-(void)cellSelected:(id)sender {

     //Single tap code here

}

您还没有指定将这些手势识别器放在什么类型的视图上,但是,既然您将其称为“cell”,我假设它放在UITableView上

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

gesture.cancelsTouchesInView=NO;

您需要使用这两种方法中的一种

- (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
}
在这里,您需要指定要使用手势识别器的视图

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

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

希望它能对您有所帮助。

我对此进行了测试,删除了代理,效果良好。请尝试删除代理。你在告诉这些手势他们可以同时开火。事实并非如此。你应该只使用水龙头或长按。不是两者都有。