2011-12-28 13 views
16

मेरे पास कुछ अनुभागों के साथ एक UITableView है, प्रत्येक का अपना हेडर व्यू है। जब उपयोगकर्ता किसी सेक्शन के शीर्षलेख दृश्य पर टैप करता है, तो उस अनुभाग की सभी पंक्तियां गिर जाएंगी।UITableView रीलोडक्शन/रीलोडडाटा: हेडर व्यू रिक्त हो जाता है

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom]; 

सब कुछ काम करता है के रूप में उम्मीद, एक बात को छोड़कर: खंड के शीर्षक दृश्य सफेद खाली हो जाता है मैं 0 करने के लिए उस अनुभाग की पंक्ति की संख्या निर्धारित है, और फिर कहते हैं, मुझे क्या करना है। जब मैं तालिका को स्क्रॉल करता हूं, तो हेडर फिर सामान्य हो जाता है।

तो मुझे लगता है कि तालिका के चित्रण में कुछ समस्या है।

एक मजेदार बात यह है कि, यदि मैं इसके बजाय UITableViewRowAnimationFade का उपयोग करता हूं, तब भी जब मैं तालिका को स्क्रॉल करता हूं, तब भी हेडर अभी भी खाली खाली होता है।

जब मैं केवल एक सेक्शन को अद्यतन करता हूं तो कोई समस्या नहीं होती है - जब मैं एक से अधिक सेक्शन को अद्यतन करता हूं तो समस्या होती है।

तो मैं

[self.tableView reloadData] 

बजाय का उपयोग करें, तो सब कुछ ठीक काम करता है।

कारण मैं का उपयोग

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom]; 

है क्योंकि मैं एनीमेशन चाहते हैं।

स्टार्टअपडेट्स/एंडुपडेट्स के साथ लपेटना काम नहीं करता है। बहुत ही सुंदर नहीं है, लेकिन यह काम करता है -

उत्तर

1

मैं एक काम के आसपास पाया। इसके बजाय एक से अधिक अनुभाग के साथ एक NSIndexSet प्रदान करने की, मैं reloadSections एक के लिए लूप के भीतर प्रत्येक कॉल में केवल एक ही अनुभाग के साथ कहते हैं।

लगता है:

for (Element *eleSection in self.gruppenKoepfe) { 
     if (eleSection.type.integerValue == qmObjectTypeFormularSpalte || eleSection.type.integerValue == qmObjectTypeFormularZeile) { 
      [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:nCount] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     nCount ++; 
    }  
0

मैं एक ऐसी ही समस्या हो रही थी, को छोड़कर मैं हटाने के लिए/डालने वर्गों कोशिश कर रहा था, और मैंने पाया कि एक मजबूत संपत्ति संपूर्ण शीर्ष लेख दृश्य की ओर इशारा करते (रखने यानी न सिर्फ एक सबव्यूव) ने अनुभाग अपडेट के दौरान इसे गायब कर दिया।

उदा संपत्ति और इन्स्टेन्शियशन

@property (nonatomic, strong) UIView *headerView;

-(UIView *)headerView { 
    if (!_headerView) { 
    _headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width, 300)]; 
    // add additional view setup, including subviews 
    } 
    return _headerView; 
} 

और tableView:(UITableView *)viewForHeaderInSection:(NSInteger)section में:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    if (section == theCorrectSection) { 
     return self.headerView; 
    } 
    return nil; 
} 
33

मुझे लगता है कि यह एक लंबे समय के बाद से इस सवाल उठाया गया था, लेकिन मुझे लगता है कि नीचे दिए गए जवाब के सभी सही नहीं हैं।

मुझे एक ही समस्या थी (किसी और के कोड के साथ) और इस पोस्ट द्वारा बेवकूफ़ बनने वाला था जब मुझे एहसास हुआ कि कोड टेबल हेडर का सही उपयोग नहीं कर रहा है। हेडर गायब हो रहा था क्योंकि कोड केवल UIView की आपूर्ति कर रहा था, UITableViewHeaderFooterView नहीं, सही ढंग से पंजीकृत है और पुन: उपयोग के लिए सेट अप किया गया है। How to use UITableViewHeaderFooterView?

मेरे खाली हेडर दूर चला गया जब मैं एक पुन: प्रयोज्य हैडर की स्थापना:

जवाब यहाँ पर एक नज़र डालें।

+1

यह सही जवाब होना चाहिए कारण होगा समारोह UIView? की वापसी के लिए कॉल है। धन्यवाद! :) – RJiryes

+0

अच्छा पकड़ - अब इतना स्पष्ट लगता है ... :) – NSTJ

+0

उस प्रश्न में कोई स्वीकार्य उत्तर नहीं है। पालन ​​करने वाला कौन सा है? – GeneCode

0

मेरे पास एक ही समस्या थी और यह उपरोक्त में से कोई नहीं था। मेरी समस्या यह थी कि मैं पहले हेडर को मजाक कर रहा था और कुछ कारणों के बाद 10 सूचकांक 2 पर शीर्षलेख को फिर से लोड किया गया था। जब मैं headerView.hidden = false सेट करता हूं तो यह ठीक था।

1

स्विफ्ट में:

आप एक वर्ग UITableViewHeaderFooterView का एक उपवर्ग है कि बना सकते हैं और तालिका दृश्य में पंजीकृत करने की जरूरत है। फिर viewForHeaderInSection में, आप let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as! YourHeaderView करते हैं, जो आप UITableViewCells के लिए करते हैं। फिर उस header वापस करें।

भ्रामक बात है जब यह वास्तव में एक dequeuedReusableHeaderFooterView की जरूरत है या reloadData इसे गायब करने के लिए

+0

क्या आप इसके लिए कोड का एक स्निपेट प्रदान कर सकते हैं? मैं इस मुद्दे के साथ कई दिनों से संघर्ष कर रहा हूं और आप अकेले ही इस दृष्टिकोण का सुझाव दे रहे हैं (जो मुझे लगता है कि सही है) –

+0

मैं कृपया कहना भूल गया –

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