UITapGestureRecognizer - single tap and double tap UITapGestureRecognizer - single tap and double tap ios ios

UITapGestureRecognizer - single tap and double tap


UITapGestureRecognizer *singleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSingleTap)] autorelease];singleTap.numberOfTapsRequired = 1; [self.view addGestureRecognizer:singleTap];UITapGestureRecognizer *doubleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doDoubleTap)] autorelease];doubleTap.numberOfTapsRequired = 2; [self.view addGestureRecognizer:doubleTap];[singleTap requireGestureRecognizerToFail:doubleTap];

Note: If you are using numberOfTouchesRequired it has to be .numberOfTouchesRequired = 1;

For Swift

let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didPressPartButton))singleTapGesture.numberOfTapsRequired = 1view.addGestureRecognizer(singleTapGesture)let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))doubleTapGesture.numberOfTapsRequired = 2view.addGestureRecognizer(doubleTapGesture)singleTapGesture.require(toFail: doubleTapGesture)


Swift 3 solution:

let singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:)))singleTap.numberOfTapsRequired = 1view.addGestureRecognizer(singleTap)let doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:)))doubleTap.numberOfTapsRequired = 2view.addGestureRecognizer(doubleTap)singleTap.require(toFail: doubleTap)

In the code line singleTap.require(toFail: doubleTap) we are forcing the single tap to wait and ensure that the tap event is not a double tap.


You need to use the requireGestureRecognizerToFail: method. Something like this:

[singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];