2009-10-19 16 views
14

मैं उस अनुभाग से किसी कक्ष का चयन होने पर UITableView में किसी अनुभाग के लिए हेडर शीर्षक बदलने की कोशिश कर रहा हूं। tableView:titleForHeaderInSection एप्लिकेशन द्वारा ट्रिगर किया गया है, इसलिए इससे मदद नहीं मिलती है। मैं reloadData पर कॉल कर सकता हूं, लेकिन प्रदर्शन पीड़ित है क्योंकि ऐप को सभी दृश्यमान कोशिकाओं को फिर से लोड करना होगा। मैंने कस्टम हेडर का उपयोग करने की भी कोशिश की, लेकिन इसके परिणामस्वरूप कुछ प्रदर्शन समस्याएं भी हुईं।तालिका के बिना UITableView अनुभाग शीर्षलेख बदलना देखें: titleForHeaderInSection

UILabel पर हैंडल प्राप्त करने का कोई तरीका है कि डिफ़ॉल्ट हेडर व्यू मैन्युअल रूप से इसका टेक्स्ट उपयोग और बदलता है?

धन्यवाद!

उत्तर

14

सिस्टम-प्रदत्त अनुभाग शीर्षलेख दृश्य तक पहुंचने के लिए कोई मानक API प्रतीत नहीं होता है। क्या आपने नया हेडर टेक्स्ट प्रदर्शित करने के लिए UIKit प्राप्त करने के लिए अधिक लक्षित reloadSections:withRowAnimation की कोशिश की है?

कस्टम अनुभाग शीर्षलेख दृश्यों के साथ आप किस प्रकार के प्रदर्शन समस्याएं देख रहे थे? मुझे संदेह है कि मानक एक UILabel से कहीं अधिक है।

+0

ऐसा लगता है कि मुझे रीलोडक्शन का उपयोग करना पड़ सकता है, भले ही यह पूरी तालिका को पुनः लोड करने के रूप में धीमा हो (मेरे ऐप के लिए कम से कम)। मुझे कोको एपीआई द्वारा हर मोड़ पर फंसाया गया है। मैंने UILabel के एक सेट का पुन: उपयोग करने के लिए एक गोलाकार कतार का उपयोग करने की कोशिश की और उन्हें देखने के लिए फॉरहेडर, लेकिन देखें फोरहेडर को इतनी सारी कोशिकाओं के लिए बुलाया जाता है (यहां तक ​​कि वे जो दिखाई नहीं दे रहे हैं!), कि मुझे प्रत्येक सेल के लिए एक अलग UILabel बनाने की आवश्यकता है, बस सादा बुरा है। अरे! –

0

यह एक डब्ल्यूएजी है, और मैं कई कारणों से सोच सकता हूं कि यह क्यों काम नहीं कर सकता है, लेकिन क्या आप सबव्यूज़ के माध्यम से पुन: प्रयास नहीं कर सकते हैं, और जिसे आप ढूंढ रहे हैं उसे ढूंढ सकते हैं? जैसे

for (UIView *v in self.tableView.subviews) { 
    // ... is this the one? 
} 
1

के बाद से एक UITableView enqueue नहीं है और पुन: उपयोग के लिए विपंक्ति अनुभाग शीर्ष लेख दृश्य के लिए आप के रूप में अच्छी दिखाई दे सकता है अगर यह स्मृति में सभी अनुभाग शीर्ष लेख विचारों स्टोर करने के लिए संभव है। ध्यान दें कि ऐसा करने के लिए आपको पृष्ठभूमि और आदि के साथ अपना स्वयं का अनुभाग शीर्षलेख दृश्य बनाना होगा, लेकिन यह आपको थोड़ा अधिक लचीलापन और क्षमता प्रदान करता है।

आप अनुभाग शीर्षलेख दृश्यों को टैग करने का भी प्रयास कर सकते हैं (आपको अपने स्वयं के अनुभाग शीर्षलेख दृश्य बनाने की भी आवश्यकता है) और आवश्यकतानुसार उन्हें तालिकादृश्य से पकड़ लें।

24

कॉलिंग [tableView endUpdates] बिना किसी प्रदर्शन हिट के वांछित परिणाम प्रदान कर सकता है। साथ

[self.tableView beginUpdates]; 
[self.tableView endUpdates]; 

// forces the tableView to ask its delegate/datasource the following: 
// numberOfSectionsInTableView: 
// tableView:titleForHeaderInSection: 
// tableView:titleForFooterInSection: 
// tableView:viewForHeaderInSection: 
// tableView:viewForFooterInSection: 
// tableView:heightForHeaderInSection: 
// tableView:heightForFooterInSection: 
// tableView:numberOfRowsInSection: 
+1

आईओएस 10/11 (स्विफ्ट) में मैंने देखा है 'tableView: viewForHeaderInSection:' और 'tableView: viewForFooterInSection: 'जिन्हें कॉल नहीं किया जाता है, इसलिए आपको स्वयं को दृश्य बदलने की आवश्यकता है –

13

:

[self.tableView headerViewForSection:i] 

आप धारा मैं के लिए देखें "अद्यतन" मिल सकता है और उसके बाद इसे मैन्युअल

यह और भी, अपने दृश्य सिर्फ स्वत: जनरेट लेबल है अगर काम करता है लेकिन आपको इसे स्वयं का आकार बदलना होगा। इसलिए यदि आप करने की कोशिश:

[self.tableView headerViewForSection:i].textLabel.text = [self tableView:self.tableView titleForHeaderInSection:i]; 

आप पाठ सेट हो जाएगा, लेकिन आप लेबल आकार निर्धारित नहीं होता। तुम खुद सेट करने के लिए NSString से आवश्यक आकार प्राप्त कर सकते हैं:

[label.text sizeWithFont:label.font]; 
+0

हैकिश और सलाह देने की सलाह नहीं है, लेकिन यह वही है जो आवश्यक था मूल प्रश्न में। तो +1। – bioffe

+2

[self.tableView headerViewForSection: i] हमेशा शून्य मान –

+0

मुझे लगता है कि यदि आपके पास हेडर नहीं है (यानी स्टोरीबोर्ड में बनाए गए स्थैतिक कक्ष और प्रत्येक अनुभाग की "हेडर" -फिल्ल्ड नहीं है तो मुझे लगता है कि आपको शून्य मिलेगा)। –

0

समाधान में से एक लेबल संदर्भों वाले कई अनुभाग हेडर के लिए बाहरी सरणी का प्रबंधन और उन्हें बाहर से अद्यतन करने के लिए किया जाएगा।

3

आप सीधे अनुभाग हेडर लेबल के लिए शीर्षक सेट कर सकते हैं। उदाहरण के लिए, अनुभाग शून्य के शीर्षक सेट करने के लिए:

UITableViewHeaderFooterView *sectionZeroHeader = [self.tableView headerViewForSection:0]; 
NSString *sectionZeroLabel = @"Section Zero"; 
[sectionZeroHeader.textLabel setText:[sectionZeroLabel uppercaseString]]; 
[sectionZeroHeader setNeedsLayout]; 

सुनिश्चित करें और अनुभाग शीर्ष लेख दृश्य यह लेआउट की जरूरत है, अन्यथा नया पाठ छोटा किया जा सकता बताओ। इसके अलावा, अनुभाग लेबल आमतौर पर सभी अपरकेस होते हैं।

+0

पर सेट अप कर सकते हैं यदि आप ऑटो ऊंचाई का उपयोग कर रहे हैं तो यह काम नहीं करता है। – lostintranslation

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