2011-12-15 17 views
11

मेरे पास एक या एकाधिक स्क्रॉलव्यू के साथ कई दृश्य नियंत्रक हैं। हालांकि मैंने एक से अधिक स्क्रॉल व्यू के साथ दृश्य नियंत्रकों में scrollsToTop झंडे स्पष्ट रूप से सेट किए हैं, फिर भी कुछ स्क्रॉल दृश्य स्थिति बार टैप करते समय स्क्रॉल करने से इनकार करते हैं।यह पता लगाने के लिए कि कौन सी अन्य UIScrollView scrollsToTop में हस्तक्षेप करता है?

एक और दृश्य नियंत्रक को धक्का देने के बाद और इसे इशारा करते हुए इशारा कभी-कभी उस दृश्य में काम करता है जो पहले नहीं था।

यह बहुत भ्रमित है और मुझे नहीं पता कि समस्या क्या है। इस मुद्दे को प्रभावी ढंग से डीबग कैसे किया जा सकता है? क्या स्टेटस बार टैप के लिए कोई वैश्विक (निजी) अधिसूचना है, इसलिए मैं मैन्युअल रूप से दृश्यों को स्क्रॉल कर सकता हूं? आप कितने UIScrollViews लगता है पर निर्भर करता है

- (void)findMisbehavingScrollViews 
{ 
    UIView *view = [[UIApplication sharedApplication] keyWindow]; 
    [self findMisbehavingScrollViewsIn:view]; 
} 

- (void)findMisbehavingScrollViewsIn:(UIView *)view 
{ 
    if ([view isKindOfClass:[UIScrollView class]]) 
    { 
     NSLog(@"Found UIScrollView: %@", view); 
     if ([(UIScrollView *)view scrollsToTop]) 
     { 
      NSLog(@"scrollsToTop = YES!"); 
     } 
    } 
    for (UIView *subview in [view subviews]) 
    { 
     [self findMisbehavingScrollViewsIn:subview]; 
    } 
} 

, तो वह कोड आपके विशेष स्थिति डिबग मदद करने के लिए संशोधित कर सकते हैं:

उत्तर

22

मैं की तरह से पहले इस परिदृश्य डिबग करने के लिए, निम्न कोड का इस्तेमाल किया है।

कुछ विचार:

  • बदलें विभिन्न scrollviews की पृष्ठभूमि रंग स्क्रीन पर उन्हें पहचान करने के लिए।
  • उन सभी स्क्रूव्यू के दृश्य पदानुक्रम को उनके सभी पर्यवेक्षकों की पहचान करने के लिए प्रिंट करें।

आदर्श रूप से, आपको केवल विंडो पदानुक्रम में एक एकल UIScrollView मिलना चाहिए जिसमें स्क्रॉल टॉटटॉप को YES पर सेट किया गया है।

+0

हालांकि मैं इस समाधान एटीएम परीक्षण नहीं कर सकते, तर्क ध्वनि है। –

+0

सरल अभी तक सुंदर स्निपेट! – nobre

1

मैं सुविधा के लिए तेज में स्वीकार कर लिया जवाब बदल दिया है:

func findMisbehavingScrollViews() { 
    var aview = UIApplication.sharedApplication().keyWindow 
    findMisbehavingScrollViewsIn(aview!) 
} 

func findMisbehavingScrollViewsIn(aview: UIView) { 
    if aview.isKindOfClass(UIScrollView) { 
     if (aview as! UIScrollView).scrollsToTop { 
      print("found uiscrollview \(aview)") 
     } 
    } 
    for bview in aview.subviews { 
     findMisbehavingScrollViewsIn(bview) 
    } 
} 
संबंधित मुद्दे