2012-11-14 10 views
9

स्क्रॉल मैं transitionStyle UIPageViewControllerTransitionStyleScroll और navigationOrientation UIPageViewControllerNavigationOrientationVerticalUIPageViewController

के साथ एक UIPageViewController उपयोग कर रहा हूँ मैं भी दृश्य पर एक UIPanGestureRecognizer है और मैं पेज स्क्रॉल को निष्क्रिय करना चाहते जब पैन इशारा सक्रिय है अक्षम करें।

मैं जब इशारा शुरू होता है निम्नलिखित स्थापित करने के लिए कोशिश कर रहा हूँ:

pageViewController.view.userInteractionEnabled = NO; 

यह कोई असर नहीं हो रहा है, या यह कई मायनों काम करने के लिए प्रकट होता है।

पैन इशारा करते समय UIPageViewController डेटा स्रोत को शून्य करने के लिए एकमात्र अन्य तरीका है, हालांकि डेटा स्रोत को रीसेट करते समय यह बड़ी देरी का कारण बनता है।

उत्तर

23

UIPageViewController स्क्रॉलिंग को संभालने के लिए कुछ UIScrollView ऑब्जेक्ट का उपयोग करता है (कम से कम संक्रमण के लिए स्टाइल UIPageViewControllerTransitionStyleScroll)। इसे प्राप्त करने के लिए आप नियंत्रक के सबव्यू pageViewController.view.subviews द्वारा पुनरावृत्त कर सकते हैं। अब, आप easly सक्षम/अक्षम कर स्क्रॉलिंग:

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

मैं थोड़ी देर के लिए खोज कर रहा हूं और यह सबसे अच्छा जवाब है जिसे मैंने UIPageViewController पर स्वाइप करने के लिए पाया है लेकिन टैप आंदोलन को बनाए रखा है। –

+0

स्विफ्ट में, यदि आपको कंडेन्स्ड सामान को पढ़ने में थोड़ा मुश्किल लगता है: 'पृष्ठ दृश्य कंट्रोलर .view.subviews.flatMap ({$ 0 as? UIScrollView})। प्रत्येक के लिए ({$ 0.isScrollEnabled = सक्षम}) ' – HHK

3

जो लोग तेज बजाय का उपयोग कर रहे ऑब्जेक्टिव-सी के लिए, यहाँ Squikend के समाधान स्थानांतरित है।

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

इस बारे में कैसे?

for (UIGestureRecognizer *recognizer in pageViewController.gestureRecognizers) 
{ 
    recognizer.enabled = NO; 
} 
संबंधित मुद्दे