2012-11-14 18 views
9

Używam UIPageViewController z transitionStyle UIPageViewControllerTransitionStyleScroll i navigationOrientation UIPageViewControllerNavigationOrientationVerticalUIPageViewController wyłączyć przewijanie

Mam też UIPanGestureRecognizer na widoku i chcę wyłączyć przewijanie strony, gdy gest pan jest aktywny.

Próbuję ustawić następuje, gdy gest zaczyna:

pageViewController.view.userInteractionEnabled = NO; 

ten wydaje się mieć żadnego wpływu, lub wydaje się działać sporadycznie.

Jedyny inny sposób, w jaki znalazłem to zrobić (co działa) to ustawienie źródła danych UIPageViewController na zero podczas działania gestu panoramowania, jednak powoduje to ogromne opóźnienie podczas resetowania źródła danych.

Odpowiedz

23

UIPageViewController używa jakiegoś obiektu UIScrollView do obsługi przewijania (przynajmniej dla transitionStyle UIPageViewControllerTransitionStyleScroll). Możesz iterować przez podrzędne widoki kontrolera, aby je uzyskać. Teraz można w łatwy włączyć/wyłączyć przewijanie:

- (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

Szukałem przez chwilę i jest to najlepsza odpowiedź, którą znalazłem dla wyłączenia przesuwania na UIPageViewController, ale zachowując ruch zaczepu. –

+0

W szybkim, jeśli lubisz skondensowane rzeczy nieco trudne do odczytania: 'pageViewController.view.subviews.flatMap ({$ 0 as? UIScrollView}). ForEach ({$ 0.isScrollEnabled = enabled})' – HHK

3

Dla tych, którzy są przy użyciu Swift zamiast objective-c, oto rozwiązanie Squikend za transponowane.

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

Co powiesz na to?

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