2013-04-05 13 views
7

UIPageViewController@interface PageScrollViewController : UIPageViewController)を継承するviewControllerを取得しました。UIPageViewControllerからのスクロールをどのように有効または無効にすることができますか? UIScrollViewを使用する場合、setScrollEnabled:NOself.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

UIPageViewControllergestureRecognizersをループしてみて、無効/それらを有効にします。

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

注:this SO postに見られるような、この方法はUIPageViewControllerTransitionStylePageCurlに対してのみ有効です。 this solutionを試してみるとよいかもしれませんが(ちょっとハッキリです)

+0

私はこれを試しましたが、for-loopは実行されません – 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にキャストすることができます:

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

そして再びそれを有効にするために:

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

スクロールnil防止にUIPageViewController dataSourceプロパティを設定すると、ページビューコントローラ理由移行する「次の」View Controllerを決定する方法はありません。

self.dataSource = nil // scrolling disabled 

self.dataSource = self // scrolling enabled 
関連する問題