2013-04-05 3 views
7

Я получил viewController, который наследует от UIPageViewController (@interface PageScrollViewController : UIPageViewController) Теперь мне интересно, как я могу включить и отключить прокрутку от UIPageViewController? При использовании UIScrollView вы бы сделали setScrollEnabled:NO и self.view.userInteractionEnabled = NO; не является вариантом, так как это блокирует целое UIView вместо прокрутки.Отключить/включить прокрутку в UIPageViewController

EDIT Это в PageScrollViewController : UIPageViewController классе:

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

ответ

9

Попробуйте перекручивание через gestureRecognizers в UIPageViewController и отключить/включить их:

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

Примечание: как найти в this SO post, этот метод будет работать только для UIPageViewControllerTransitionStylePageCurl. Вы можете попробовать this solution (хотя, похоже, он немного взломан).

+0

Я пробовал это, цикл for никогда не выполняется. – Shinonuma

+1

Где вы выполняете этот цикл? Было бы полезно увидеть какой-то код. – tilo

+0

Я отредактировал мой вопрос – Shinonuma

6

Я сделал следующее (у меня есть контроллер, который содержит UIPageViewController).

self.pageController.view.userInteractionEnabled = NO; 

И если вы хотите включить прокрутку или прокрутку, просто включите взаимодействие с пользователем.

+2

К сожалению, это также отключает любые элементы управления, которые у вас есть в vc. – Fook

+1

Как @Shinonuma сказал: «self.view.userInteractionEnabled = NO; не является вариантом, поскольку это блокирует весь UIView, а не просто прокрутку». –

+0

@ MárioCarvalho да, он отключает любой жест, это недостаток этого решения. :(Я разместил это, так как он может помочь кому-то и быть достаточно (как и для меня) при поиске его решения. – Nemanja

8

Или вы можете бросить в вашем PagingVC Чтобы отключить Paging:

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

И включить его снова:

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

Установка свойства UIPageViewController dataSource для nil предотвращает прокрутки, потому что контроллер представления страницы не имеет способа определить «следующий» контроллер просмотра для перехода на.

self.dataSource = nil // scrolling disabled 

self.dataSource = self // scrolling enabled 
Смежные вопросы