Restrict UIPageViewController (with TransitionStyleScroll) pan gesture to a certain area

cocoa-touch, objective-c, uigesturerecognizer, uipageviewcontroller

Solution

I do it by subclassing the UIPageViewController, finding its UIScrollView (iterate self.subviews), and adding a new UIPanGestureRecognizer to that scrollView.

I set my subclassed UIPageViewController to be the delegate of that new UIPanGestureRegognizer. I then implement two delegate methods:

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

and in

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

I decide if I want to "eat the event" (reply YES) or if I want the original UIPanGestureViewRecognizer of the UIScrollView to handle it (reply NO). So, the YES-reply means the UIPageViewController will not scroll to the next ViewController.

Problem

In my app I have a RootPageViewController which contains the UIPageViewController and one or more DetailPageViewController with a UITableView as a childview. ``` DetailPageViewController / RootPageViewController - DetailPageViewController \ DetailPageViewController ``` On top of every DetailPageViewController is a little space where it should be possible to swipe and get to the next DetailPageViewController. ``` ------------------- | | | | -> UIPageViewController should respond to pan's | | |-------------------| -------------------------------------------- | CellContent | |-------------------| | CellContent | |-------------------| -> UIPageViewController should disable UIPageViewController pan's | CellContent | |-------------------| | ... | ``` In the iOS 7 weather app is a scrollview with the whole weak forecast who somehow overwrites or disables the the pan of the UIPageViewController. How can I recreate such behavior ? Sorry for the missing screenshots

Original source