2012-06-05 12 views
12

मैं उपयोगकर्ता स्क्रॉल के रूप में UITableView में कुछ पंक्तियों की स्थिति को ठीक करने में सक्षम होना चाहता हूं।UITableView - उपयोगकर्ता स्क्रॉल के रूप में तय की गई पंक्ति पंक्तियों को कैसे रखें

विशेष रूप से, मेरे पास एक सारणी है जिसके द्वारा पंक्तियों के लिए कुछ पंक्तियां "हेडर" हैं, और मैं चाहता हूं कि उपयोगकर्ता स्क्रीन स्क्रॉल के रूप में स्क्रीन के शीर्ष पर बने रहें। तब यह उस रास्ते से बाहर निकल जाएगा जब उपयोगकर्ता इतनी पर्याप्त स्क्रॉल करता है कि अगली हेडर पंक्ति इसकी जगह ले लेगी।

एक समान उदाहरण Any.DO ऐप होगा। स्क्रीन पर "आज", "टॉमोर" और "बाद में" टेबल पंक्तियां हमेशा दिखाई देती हैं।

क्या किसी के पास इस बारे में कोई सुझाव है कि इसे कैसे कार्यान्वित किया जा सकता है?

मैं वर्तमान में टेबलडिडस्क्रॉल प्रतिनिधि का पालन करने और तालिका दृश्य के सामने उपयुक्त स्थान पर अपना स्वयं का सेल रखने की सोच रहा हूं। समस्या यह है कि दूसरी बार मैं वास्तव में इन कोशिकाओं को वास्तविक टेबल कोशिकाओं के रूप में पसंद करूंगा ताकि वे हो सकें, उदाहरण के लिए, उपयोगकर्ता द्वारा पुन: व्यवस्थित किया जा सकता है।

धन्यवाद,

टिम

+1

तुम क्यों UITableView शीर्ष लेख का उपयोग नहीं करते? आप वहां टेक्स्ट डाल सकते हैं या कस्टम व्यू बना सकते हैं। उस – Novarg

उत्तर

13

मैं इसके साथ खेल रहा हूं और मैं एक साधारण समाधान के साथ आया हूं।

सबसे पहले, हम नियंत्रक को एक एकल UITableViewCell गुण जोड़ते हैं। इसे प्रारंभ करना चाहिए जो कि पंक्ति कोशिकाओं की तरह दिखता है जिसे हम झूठी धारा शीर्षलेख बनाने के लिए उपयोग करेंगे।

इसके बाद, हम तालिका दृश्य

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // Add some logic here to determine the section header. For example, use 
    // indexPathsForVisibleRows to get the visible index paths, from which you 
    // should be able to get the table view row that corresponds to the current 
    // section header. How this works will be implementation dependent. 
    // 
    // If the current section header has changed since the pervious scroll request 
    // (because a new one should now be at the top of the screen) then you should 
    // update the contents. 

    IndexPath *indexPathOfCurrentHeaderCell = ... // Depends on implementation 
    UITableViewCell *headerCell = [self.tableView cellForRowAtIndexPath:indexPathOfCurrentHeaderCell]; 

    // If it exists then it's on screen. Hide our false header 

    if (headerCell) 
     self.cellHeader.hidden = true; 

    // If it doesn't exist (not on screen) or if it's partially scrolled off the top, 
    // position our false header at the top of the screen 

    if (!headerCell || headerCell.frame.origin.y < self.tableView.contentOffset.y) 
    { 
     self.cellHeader.hidden = NO; 
     self.cellHeader.frame = CGRectMake(0, self.tableView.contentOffset.y, self.cellHeader.frame.size.width, self.cellHeader.frame.size.height); 
    } 

    // Make sure it's on top of all other cells 

    [self.tableView bringSubviewToFront:self.cellHeader]; 
} 

अंत में, हम है कि सेल पर कार्रवाई रोकना और सही काम करने की ज़रूरत है की स्क्रॉल रोकना ...

+0

बहुत बहुत धन्यवाद, tarmes। मैं इसी तरह की चीज़ ढूंढ रहा हूं और अपने आवेदन में अपने तर्क को भी लागू करने की आवश्यकता है। हालांकि, मैं हेडर क्या प्राप्त नहीं कर सका क्या आपका मतलब है? और जब आपका मतलब हेडरसेल स्क्रीन पर है? – Hai

+0

हेडरसेल टेबल तालिका में सेल है जिसे आप स्क्रॉल किए जाने के बाद तालिका के शीर्ष पर रहना चाहते हैं। – tarmes

+0

प्रश्न: आप कहते हैं कि आप हेडर को पुन: व्यवस्थित करने में सक्षम होने के लिए इसका उपयोग करते हैं। क्या आप हेडर रीडरिंग को आसान बनाने के लिए सामग्री कक्षों को संकुचित करते हैं?मैं इसके बारे में सोच रहा था लेकिन यह सुनिश्चित नहीं है कि यह संभव है, क्योंकि 'रीलोडडाटा' या अन्य प्रकार के टेबल व्यू अपडेट शायद फ्लोटिंग हेडर सेल को बाधित/वापस लाएंगे। – Ixx

2

के लिए सादे UITableView मामलों में खंड हेडर डिफ़ॉल्ट व्यवहार है कि। यदि आप एक कस्टम शीर्षलेख बनाना चाहते हैं, तो अपनी तालिका दृश्य में tableView:viewForHeaderInSection: विधि को लागू करें और अपने शीर्षलेख के लिए दृश्य वापस करें।

हालांकि आपको केवल पंक्तियों के बजाय अनुभागों और पंक्तियों का प्रबंधन करना होगा।

+0

के लिए UITableViewDelegate के मेथोड हैं समस्या यह है कि मैं अनुभाग शीर्षलेख रिकॉर्डर करने में सक्षम होना चाहता हूं। जहां तक ​​मैं कह सकता हूं कि कोई यूआई नहीं है जो उपयोगकर्ता को ऐसा करने की अनुमति देगा, जैसे कि वे वर्तमान में अनुभाग पंक्तियों को खींच सकते हैं ... – tarmes

+0

मुझे लगता है कि आपको इसे स्वयं संभालना होगा। थोड़ा जटिल लगता है लेकिन मुझे यकीन है कि यह किया जा सकता है। ऐसा लगता है कि वहाँ कुछ भी लागू नहीं किया गया है। शायद मैं इसके साथ आपकी मदद कर सकता हूं और हम इसे गीथूब या कुछ पर डाल सकते हैं। –

+0

दिलचस्प बात यह है कि अब एक चाल है: पता लगाने के लिए: आईओएस 5 में कॉल करें, लेकिन मुझे नहीं लगता कि यूआई से इस कदम को शुरू करने का कोई तरीका है ... – tarmes

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

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