2012-11-14 2 views
9

Ich verwende einen UIPageViewController mit transitionStyle UIPageViewControllerTransitionStyleScroll und navigationOrientation UIPageViewControllerNavigationOrientationVerticalUIPageViewController deaktivieren Scrollen

Ich habe auch eine UIPanGestureRecognizer auf der Ansicht, und ich möchte Seite Scrollen deaktivieren, wenn die Pfanne Geste aktiv ist.

Ich versuche, die folgende einzustellen, wenn die Geste beginnt:

pageViewController.view.userInteractionEnabled = NO; 

Dies scheint keine Wirkung zu haben, oder es erscheint sporadisch zu arbeiten.

Die einzige andere Möglichkeit, die ich gefunden habe (was funktioniert) ist, die UIPageViewController dataSource auf Null zu setzen, während die Schwenkgeste läuft, aber dies verursacht eine große Verzögerung beim Zurücksetzen der DataSource.

Antwort

23

UIPageViewController verwendet ein UIScrollView-Objekt, um mit dem Scrollen zu arbeiten (mindestens für transitionStyle UIPageViewControllerTransitionStyleScroll). Sie können nach den Unteransichten pageViewController.view.subviews des Controllers iterieren, um es zu erhalten. Jetzt können Sie easly aktivieren/deaktivieren Scrollen:

- (void)setScrollEnabled:(BOOL)enabled forPageViewController:(UIPageViewController*)pageViewController 
{ 
    for (UIView *view in pageViewController.view.subviews) { 
     if ([view isKindOfClass:UIScrollView.class]) { 
      UIScrollView *scrollView = (UIScrollView *)view; 
      [scrollView setScrollEnabled:enabled]; 
      return; 
     } 
    } 
} 
+0

Ich habe seit einer Weile gesucht, und dies ist die beste Antwort, die ich für das Deaktivieren von Swiping auf UIPageViewController gefunden habe, aber die Tippbewegung beibehalten. –

+0

In swift, wenn Sie kondensierte Sachen ein bisschen schwer zu lesen mögen: 'pageViewController.viewnoviews.flatMap ({$ 0 as? UIScrollView}). ForEach ({$ 0.isScrollEnabled = aktiviert})' – HHK

3

Für diejenigen, die rasche Verwendung anstelle von Objective-C, hier ist Squikend-Lösung umgesetzt.

func findScrollView(#enabled : Bool) { 
    for view in self.view.subviews { 
     if view is UIScrollView { 
     let scrollView = view as UIScrollView 
     scrollView.scrollEnabled = enabled; 
     } else { 
     println("UIScrollView does not exist on this View") 
     } 

    } 
    } 
0

Wie wäre es damit?

for (UIGestureRecognizer *recognizer in pageViewController.gestureRecognizers) 
{ 
    recognizer.enabled = NO; 
}