2013-04-05 19 views
7

ho ottenuto un viewController che eredita da UIPageViewController (@interface PageScrollViewController : UIPageViewController) Ora sto chiedendo come posso attivare e disattivare lo scorrimento dalla UIPageViewController? Quando si utilizza uno UIScrollView si dovrebbe fare setScrollEnabled:NO e self.view.userInteractionEnabled = NO; non è un'opzione in quanto ciò blocca l'intero UIView anziché solo lo scorrimento.Disabilitare/abilitare lo scorrimento in UIPageViewController

EDIT Questo è nella classe PageScrollViewController : UIPageViewController:

if ([[notification name] isEqualToString:@"NotificationDisable"]){ 
    NSLog (@"Successfully received the disable notification!"); 
    for (UIGestureRecognizer *recognizer in self.gestureRecognizers) { 
     recognizer.enabled = NO; 
    } 
} 

risposta

9

Prova scorrendo la gestureRecognizers del UIPageViewController e disable/permettono loro:

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

Nota: come si trova in this SO post, questo metodo funziona solo per UIPageViewControllerTransitionStylePageCurl. Si consiglia di provare this solution (anche se sembra essere un po 'hacky).

+0

Ho provato questo, il ciclo for non viene mai eseguito – Shinonuma

+1

Dove si esegue questo ciclo? Sarebbe utile vedere un po 'di codice. – tilo

+0

Ho modificato la mia domanda – Shinonuma

6

Ho fatto la seguente cosa (ho un controller che contiene UIPageViewController).

self.pageController.view.userInteractionEnabled = NO; 

E quando si desidera attivare scorrere o scorrere, basta abilitare l'interazione dell'utente.

+2

Sfortunatamente questo disabilita anche tutti i controlli che hai nel vc. – Fook

+1

Come @Shinonuma ha dichiarato: "self.view.userInteractionEnabled = NO; non è un'opzione in quanto ciò blocca l'intera visione utente anziché solo lo scorrimento." –

+0

@ MárioCarvalho sì, disabilita qualsiasi gesto, questo è il difetto di questa soluzione. :(Ho postato questo, dal momento che può aiutare qualcuno e essere abbastanza (come per me) durante la ricerca della sua soluzione. – Nemanja

8

Oppure si può lanciare nella vostra PagingVC Per disabilitare il paging:

self.delegate = nil; 
self.dataSource = nil; 

E per riattivarlo:

self.delegate = self; 
self.dataSource = self; 
0

L'impostazione della proprietà UIPageViewController dataSource-nil impedisce lo scorrimento, perché il controller visualizzazione della pagina non ha un modo per determinare il "prossimo" controller di visualizzazione in cui passare.

self.dataSource = nil // scrolling disabled 

self.dataSource = self // scrolling enabled 
Problemi correlati