2009-10-19 18 views
56

का पता लगाने के लिए मैंने UITableView (KRTableView के रूप में) को उप-वर्गीकृत किया है और चार स्पर्श-आधारित विधियों को लागू किया है (स्पर्श बैगन, स्पर्श किए गए, स्पर्श किए गए, और स्पर्श किए गए हैं) ताकि मैं पता लगा सकूं कि UITableView पर स्पर्श-आधारित ईवेंट को कब संभाला जा रहा है । अनिवार्य रूप से मुझे पहचानने की आवश्यकता है जब UITableView ऊपर या नीचे स्क्रॉल हो रहा है।UITableView स्क्रॉलिंग

हालांकि, UITableView को उपclassing और उपरोक्त विधियों को बनाने के दौरान केवल UITableViewCell के भीतर स्क्रॉलिंग या उंगली आंदोलन हो रहा है, पूरे UITableView पर नहीं।

जैसे ही मेरी उंगली अगले सेल पर ले जाया जाता है, स्पर्श इवेंट कुछ नहीं करते।

यह कैसे मैं UITableView उपवर्गीकरण कर रहा हूँ है:

#import "KRTableView.h" 


@implementation KRTableView 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    NSLog(@"touches began..."); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 
    NSLog(@"touchesMoved occured"); 
} 

- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event { 
    [super touchesCancelled:touches withEvent:event]; 
    NSLog(@"touchesCancelled occured"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    NSLog(@"A tap was detected on KRTableView"); 
} 

@end 

मैं कैसे पता लगा सकते हैं जब UITableView ऊपर या नीचे स्क्रॉल है?

उत्तर

142

आपको ईवेंट विधियों को रोकने की आवश्यकता नहीं है। UIScrollViewDelegate प्रोटोकॉल के लिए दस्तावेज़ों की जांच करें, और -scrollViewDidScroll: या -scrollViewWillBeginDragging: विधियों को अपनी स्थिति के अनुसार लागू करें।

+0

viewDidScroll जब तक आप स्क्रॉल कर रहे हैं बुलाया जा रहा रखने के लिए किया जाता है। तो आप scrollViewDidScroll पर गैलेज़ करने के लिए अपने परिवर्तनीय isDragging सेट नहीं कर सकते हैं। –

+0

क्या यह ऊपर या नीचे स्क्रॉल के बीच DISTINGUISH करने के लिए संभव है? – Markus

+0

@ मार्कस https://stackoverflow.com/questions/2543670/finding-the-direction-of-scrolling-in-a-uiscrollview – tdios

38

मैं निम्नलिखित जोड़ना चाहते हैं:

आप एक UITableView के साथ काम कर रहे हैं, तो यह संभावना है कि आप पहले से ही UITableViewDelegate कार्यान्वित कर रहे हैं डेटा के साथ तालिका भरने के लिए है।

प्रोटोकॉल UITableViewDelegate UIScrollViewDelegate के अनुरूप है, तो तुम सब करने की जरूरत है तरीकों -scrollViewWillBeginDragging और -scrollViewDidScroll सीधे अपने UITableViewDelegate कार्यान्वयन में लागू करने के लिए है और यदि कार्यान्वयन वर्ग अपने UITableView के प्रतिनिधि के रूप में सेट कर दिया जाता तो वे अपने आप बुलाया जाएगा।

आप भी अपनी तालिका में क्लिक के अवरोधन करने और केवल खींच नहीं और स्क्रॉल, आप का विस्तार करने और अपनी खुद की UITableViewCell को लागू करने और touchesBegan का उपयोग कर सकते हैं: वहाँ में तरीकों। इन दो विधियों को संयोजित करके आप यूआईटीबल व्यू के साथ इंटरैक्ट करते समय सबसे अधिक चीजों को करने में सक्षम होना चाहिए।

1

यह मेरी गलती थी, मैं tableview पुन: लोड करने से पहले विधि कॉल करने की कोशिश की। निम्नलिखित कोड ने मुझे इस मुद्दे को हल करने में मदद की।

[mytableview reloadData];

[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];

संबंधित मुद्दे