2010-08-18 24 views
34

मेरे पास एक स्क्रॉल व्यू है जो स्क्रॉल करने के लिए उपयोग किया जाता था जब उसके पास बटन नहीं थे। अब यह करता है, और माउस को खींचते समय (सिम्युलेटर पर) कुछ भी नहीं होता है (मुझे लगता है क्योंकि बटन धक्का दिए जा रहे हैं)। मैं यह कैसे सही कर सकता हूँ?स्क्रॉलव्यू बटन पर खींचते समय स्क्रॉल नहीं करते

+1

वहाँ उपकरणों और सिम्युलेटर के बीच कई मतभेद हैं, तो आप एक भौतिक डिवाइस पर इसे करने की कोशिश की है, और माउस और मल्टी टच सबसे बड़ी में से एक है! –

उत्तर

92

ऐसा इसलिए हो रहा है क्योंकि UIButtonUIScrollView के सबव्यूज़ (मुझे लगता है कि बटन आपके मामले में सबव्यूव के रूप में जोड़े गए हैं) स्पर्श को ट्रैक कर रहे हैं और स्क्रॉल व्यू नहीं। UIScrollView विधि touchesShouldCancelInContentView यहां कुंजी है। इसके विवरण के अनुसार: "डिफ़ॉल्ट लौटाया गया मान हाँ है यदि दृश्य UIControl ऑब्जेक्ट नहीं है, अन्यथा, यह NO देता है।", यानी UIControl ऑब्जेक्ट्स (बटन), UIScrollView स्क्रॉलिंग को रोकने वाले स्पर्श को रद्द करने का प्रयास नहीं करता है।

तो, बटन के साथ स्क्रॉल अनुमति देने के लिए:

  1. यकीन UIScrollView संपत्ति canCancelContentTouchesYES पर सेट है।
  2. उपवर्ग UIScrollView और touchesShouldCancelInContentView ओवरराइड YES वापस जाने के लिए जब सामग्री दृश्य वस्तु एक UIButton है, इस तरह:
- (BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 
    if ([view isKindOfClass:[UIButton class]]) { 
     return YES; 
    } 

    return [super touchesShouldCancelInContentView:view]; 
} 
+0

आपके उत्तर के लिए धन्यवाद। मैंने बटनों को अनुकरण करने के लिए छवियों वाली स्क्रॉल को बदल दिया है (और विधि को कॉल करने के बारे में जानने के लिए स्पर्शों को ट्रैक करना) मैं आपके समाधान का प्रयास करूंगा और देख सकता हूं कि यह कैसे काम करता है। धन्यवाद! – DanielaM

+4

@DanielaM अगर इस अद्भुत जवाब ने आपको वास्तव में ऐसा लगता है, तो इसे स्वीकार करना अच्छा होगा। – iHunter

+0

** बोल्ड ** @ रोमन के - तुम मेरे हीरो हो! मैंने इस ओवरलैपिंग समस्या के बारे में कई पोस्ट \ मंचों में 2 दिन पढ़ा है लेकिन वास्तव में कोई ट्वीक या समाधान वास्तव में काम नहीं करता है। आपका समाधान वास्तव में काम करता है !! चीयर्स :-) – Shvalb

9

मैं इस सवाल का इस समस्या के लिए तेजी से समाधान की तलाश में स्थापित किया गया है, मैं की तरह "अनुवाद" यह इस:

class UIButtonScrollView: UIScrollView { 

    override func touchesShouldCancelInContentView(view: UIView!) -> Bool { 
     if (view.isKindOfClass(UIButton)) { 
      return true 
     } 

     return super.touchesShouldCancelInContentView(view) 

    } 

} 

आशा है कि यह मदद कर सकता है

4

स्विफ्ट 3 समाधान

override func touchesShouldCancel(in view: UIView) -> Bool { 
    if view is UIButton { 
     return true 
    } 
    return super.touchesShouldCancel(in: view) 
} 
संबंधित मुद्दे