2012-03-02 18 views
8

के वर्तमान पिन किए गए अनुभाग को प्राप्त करें UITableView में शीर्ष अनुभाग के शीर्षक या अनुक्रमणिका को पाने का सबसे सटीक तरीका क्या है? मेरा मतलब इंडेक्स 0 पर सेक्शन का नहीं है, लेकिन अनुभाग हेडर जो स्क्रॉल करते समय शीर्ष पर पिन किया गया है।UITableView

उत्तर

13

तुम इतनी तरह स्क्रीन के शीर्ष पर अनुभाग प्राप्त कर सकते हैं:

 NSUInteger sectionNumber = [[tableView indexPathForCell:[[tableView visibleCells] objectAtIndex:0]] section]; 

लेकिन, इस विधि क्योंकि यह मिल जाएगा आप के लिए इष्टतम नहीं हो सकता है नंबर होगा अजीब जब यह संक्रमण काल ​​में है दो शीर्षकों के बीच। जब तक आपको संक्रमण के दौरान अनुभाग को जानने की आवश्यकता नहीं है, तब तक आपको ठीक होना चाहिए। मुझे उम्मीद है कि यह आपकी तलाश है,

+0

क्या विधि मैं sectionNumber चालू रखने के लिए इस में क्या रखना चाहिए? – Bot

+0

Scrollviewdidscroll अगर आप उपयोगकर्ता को –

+1

स्क्रॉल करते समय हर बार अद्यतन करना चाहते हैं तो धन्यवाद! – devios1

-1

क्या आपकी कक्षा UIScrollViewDelegate को लागू करती है, और निम्न कार्यों को लागू करती है। यह सुनिश्चित करेगा कि आप केवल अनुभाग को पुनर्प्राप्त करेंगे जब तालिकादृश्य स्क्रॉलिंग रोकता है।

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
} 
+0

तक पहुंचने से पहले '[tableView visibleCells] .count> 0' को जांचना होगा, मुझे लगता है कि यह इस तरह से कर रहा है, यह संक्रमण में होने पर खंडों को उलझन में डाल देता है? – Bot

+0

यह किसी कारण से मेरे कस्टम सेल के साथ त्रुटियों को फेंकता है ... '- [नियुक्ति कस्टम कस्टम अनुभाग]: अपरिचित चयनकर्ता उदाहरण 0x89af850' पर भेजा गया है। मैं जो कुछ भी कर रहा हूं वह आपके द्वारा प्रदान किए गए उपरोक्त कोड में अनुभाग को एनएसएलॉगिंग कर रहा है। – Bot

+0

यह पुराना है लेकिन सभी प्रकार के गलत हैं क्योंकि 'self.tableView viewCells'' UITableViewCells' देता है और 'इंडेक्सपाथ' नहीं देता है। इंडेक्सपैथ प्राप्त करने के बाद, हम इंडेक्सपाथ [0]। सेक्शन कर सकते हैं। – esh

3

मेरा मानना ​​है कि बजाय visibleCells के लिए क्वेरी की है, यह सूचकांक पथ के लिए निम्नलिखित तरीके से पूछने के लिए बेहतर है:

NSInteger section = [[[self.tableView indexPathsForVisibleRows] firstObject] section]; 

आप के अनुसार UIScrollViewDelegate तरीकों में से एक में इस कोड का उपयोग कर सकते हैं अपने की जरूरत है।

1

स्विफ्ट संस्करण

उपयोग पहले (वर्तमान पिन किए गए) या पिछले (पिछले दिखाया गया है)

if let section:Int = tableView.indexPathsForVisibleRows?.last?.section { 

     tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: section), atScrollPosition: UITableViewScrollPosition.None, animated: true) 

    }