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

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

Answers


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.


My solution in Swift:

let myview = UIView(frame: CGRect(x:0, y:0, width:320, height:320))
//dummy view that defines the area where the gesture works
self.view.addSubview(myview)

for x in self.pageViewController!.view.subviews 
{ if x is UIScrollView
  { myview.addGestureRecognizer(x.panGestureRecognizer) } 
}

Need Your Help

Hypothesis test on quantile slope against OLS slope

r quantile quantreg

Using the excellent quantreg package and testing hypothesis of equal slopes between quantile 0.1 and 0.9 using standard anova function.

How can I click on this child node / descendant using C# Selenium?

c# html selenium css-selectors

TL;DR: The developer had bound the jQuery click listener to the parent div, not the child span that I had been trying to click.