2012-11-14 31 views
9

Sto usando un UIPageViewController con transitionStyle UIPageViewControllerTransitionStyleScroll e navigationOrientation UIPageViewControllerNavigationOrientationVerticalUIPageViewController disabilitare lo scorrimento

Ho anche un UIPanGestureRecognizer sulla vista e voglio disabilitare scorrimento della pagina in cui il gesto padella è attiva.

Sto cercando di impostare la seguente quando il gesto inizia:

pageViewController.view.userInteractionEnabled = NO; 

Questo sembra non avere alcun effetto, o sembra funzionare sporadicamente.

L'unico altro modo in cui ho trovato di farlo (che funziona) è impostare UIPageViewController dataSource su zero mentre il gesto pan è in esecuzione, tuttavia ciò provoca un ritardo enorme quando si ripristina il dataSource.

risposta

23

UIPageViewController utilizza alcuni oggetti UIScrollView per gestire lo scorrimento (almeno per transitionStyle UIPageViewControllerTransitionStyleScroll). È possibile scorrere le sottoview del controllore pageViewController.view.subviews per ottenerlo. Ora, si può facilmente attivare/disattivare lo scorrimento:

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

Ho cercato per un po 'e questa è la risposta migliore che ho trovato per disabilitare lo scorrimento su UIPageViewController ma mantenendo il movimento del rubinetto. –

+0

In rapido, se ti piace un po 'di roba condensata un po' difficile da leggere: 'pageViewController.view.subviews.flatMap ({$ 0 as? UIScrollView}). ForEach ({$ 0.isScrollEnabled = enabled})' – HHK

3

Per coloro che utilizzano rapida invece di Objective-C, qui è la soluzione di Squikend recepita.

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

Che ne dici di questo?

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