user2576304
user2576304

Reputation: 231

Table view doesn't scroll when I use gesture recognizer

My app has a table view (with a scroll-into of course) and this view slides on and off with a gesture recognizer (like on the Facebook app).

If I use a button to slide [the table view onto the screen], it works fine but when I use a gesture recognizer, the table view can't be scrolled anymore.

Here is the code of gesture recognizer with the problem:

[self.view addGestureRecognizer:self.slidingViewController.panGesture];

Somebody have an idea?

Upvotes: 22

Views: 14409

Answers (5)

Pravin Kulkarni
Pravin Kulkarni

Reputation: 263

I have used UIPangesture in my UItableview and to avoid this gesture I have used below delegate,

//This method helped me stopped up/down pangesture of UITableviewCell and allow only vertical scroll
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
    if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer {
        let translation = panGestureRecognizer.translationInView(superview)
        if fabs(translation.x) > fabs(translation.y) {
            return true
        }
        return false
    }
    return false
}

Upvotes: 14

MaziB
MaziB

Reputation: 41

I had same issue of defining long press gesture on table view and not being able to scroll table when I long press on it.

Fixed by:

1- adding UIGestureRecognizerDelegate

2- adding gesture.delegate = self (after you defined the long press gesture)

3- adding this function:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {return true}

Upvotes: 4

Swinny89
Swinny89

Reputation: 7373

Here is the swift version:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

Upvotes: 10

Wain
Wain

Reputation: 119041

Your gesture is probably preventing the scroll view gesture from working because by default only 1 gesture can be recognising at a time. Try adding yourself as the delegate of your gesture and implementing:

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

self.slidingViewController.panGesture.delegate = self;

also, add <UIGestureRecognizerDelegate> to the list of protocols you implement

Upvotes: 46

alexbumbu
alexbumbu

Reputation: 331

If I get it right the view that you're adding the gesture recognizer to is the table view. By default the UIScrollView (and implicitly UITableView) class uses the pan gesture recognizer for the scroll and your gesture recognizer interferes with that. If you use another view as a container for the table view and you're adding the pan gesture recognizer to it should work.

Upvotes: 1

Related Questions