Get Swipe to Delete on UITableView to Work With UIPanGestureRecognizer

From the document:

If a gesture recognizer recognizes its gesture, the remaining touches for the view are cancelled.

Your UIPanGestureRecognizer recognizes the swipe gesture first, so your UITableView does not receive touches anymore.

To make the table view receives touch simultaneously with the gesture recognizer, add this to the gesture recognizer's delegate:

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

If you are using UIPanGuestureRecognizer for example to show side menu you might see some unwanted side effects when you just return YES in all cases as proposed in accepted answer. For example the side menu opening when you scroll up/down the table view (with additional very little left/right direction) or delete button behaving strangely when you open the side menu. What you might want to do to prevent this side effects is to allow only simultaneous horizontal gestures. This will make the delete button work properly but at the same time other unwanted gestures will be blocked when you slide the menu.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
    {
        UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *)otherGestureRecognizer;
        CGPoint velocity = [panGesture velocityInView:panGesture.view];
        if (ABS(velocity.x) > ABS(velocity.y))
            return YES;
    }
    return NO;
}

or in Swift:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    guard let panRecognizer = otherGestureRecognizer as? UIPanGestureRecognizer else {
        return false
    }
    let velocity = panRecognizer.velocity(in: panRecognizer.view)
    if (abs(velocity.x) > abs(velocity.y)) {
        return true
    }
    return false
}