2011-04-12 16 views
18

ऊंचाई को लौटने पर मैं सेल की सामग्री को जानना चाहता हूं ForRowAtIndexPath। इस फ़ंक्शन में मैं सेल ऑब्जेक्ट कैसे प्राप्त करूं?तालिका में सेल ऑब्जेक्ट कैसे प्राप्त करें दृश्य: (UITableView *) तालिका देखें ऊंचाईफॉररएटइंडेक्सपैथ फ़ंक्शन?

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

} 

यदि मैं यह

[tableView cellForRowAtIndexPath:indexPath] 

यह विफल रहता है और अनंत लूप में बंद हो जाता है की कोशिश करो।

कोई विचार?

उत्तर

0

मुझे नहीं लगता कि आप कर सकते हैं या आपको चाहिए। आपको इंडेक्सपैथ से निर्धारित करने की आवश्यकता होगी कि आप कौन सा डेटा इसी सेल में प्रदर्शित करेंगे और इस प्रकार सेल की आवश्यक ऊंचाई की गणना करेंगे।

तो आपको इंडेक्सपैथ से अपने डेटा मॉडल में सही डेटा पर जाने के लिए कुछ कोड लिखना होगा।

+1

यह गलत है, आप इस मामले में 'tableView: cellForRowWithIndexPath' भेज सकते हैं। @user ... बस इसे गलत वस्तु पर भेज रहा है। – XJones

26

तालिका के बजाय स्वयं (प्रतिनिधि) को कॉल करें स्वयं देखें।

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; 
+2

यदि आपका cellForRowAtIndexPath ऊंचाई ForRowAtIndexPath का उपयोग कर रहा है तो हमेशा अनंत रिकर्सन होगा। यदि ऐसा है, तो आपको इसे अलग-अलग आर्किटेक्ट करना होगा। – NWCoder

+4

इसे करने का एक अनुशंसित तरीका नहीं है। HeightForRowAtIndexPath को किसी कारण से cellForRowAtIndexPath से पहले कॉल किया जाता है, तो आपके पास मौजूद डेटा के आधार पर ऊंचाई की गणना करने में सक्षम होना चाहिए। ऊंचाई ForRowAtIndexPath का उपयोग करने की भी अनुशंसा नहीं की जाती है जब तक कि आपको वास्तव में कोशिकाओं के लिए अलग-अलग ऊंचाइयों की आवश्यकता न हो क्योंकि यह आकार में डेटा सेट बढ़ने के साथ बहुत धीमी है। – Joe

+4

@ जो: अर्ध-असहमत। यदि आप आसानी से सेल की जरूरत है w/o सेल की जरूरत है तो यह ठीक है। वैध मामले हैं जहां आपको इसकी ऊंचाई जानने के लिए सेल को तुरंत चालू करने की आवश्यकता है। मेरे पास कई कस्टम सेल क्लासेस हैं जो पर्याप्त जटिल हैं कि सबव्यूज़ को बिछाने की ऊंचाई की गणना करना मुश्किल है। कुछ ऐप्पल उदाहरण भी ऐसा करते हैं। – XJones

-4
uitableviewcell *ce=[self.view viewwithtag:indexPath.row]; 

यह सेल वस्तु देता है।

+0

में किसी सेल तक पहुंचने की सलाह नहीं दी जाती है यह केवल काम करेगा कि इस टैग के साथ कोशिकाएं बनाई गई हैं। यह भी ध्यान दें कि यह पुन: उपयोग किए गए कोशिकाओं के साथ समस्याग्रस्त हो सकता है, क्योंकि जब आप इसे ढूंढते हैं तब तक उन्हें हटाया जा सकता है। – NWCoder

1

सेल बनाया नहीं गया है जब heightForRowAtIndexPath: कहा जाता है, इसलिए सेल को "प्राप्त करने" का कोई तरीका नहीं है। इसके बजाय, अपने मॉडल को देखें और उस तरह से सेल की ऊंचाई निर्धारित करें।

यदि आप लंबे तारों के बारे में चिंतित हैं और अपने सेल में अधिक लंबवत स्थान की आवश्यकता है, तो sizeWithFont:forWidth:lineBreakMode: का उपयोग करने पर विचार करें। यहां डॉक्स: https://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html

2

: UITableView का उपयोग करें।
उपयोग न करें: func dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath) -> AnyObject
संभावित कारण: heightForRowAtIndexPathcellForRowAtIndexPath से पहले कहा जाता हो जाता है और इस विधि सूचकांक पथ का उपयोग करता तालिका दृश्य में सेल की स्थिति के आधार पर अतिरिक्त विन्यास प्रदर्शन करने के लिए। लेकिन चूंकि, अभी तक कोई सेल नहीं है, इसलिए यह मुझे लगता है कि अनंत लूप पर जाता है।

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