2012-04-03 11 views
21

रिटर्न लाइनस्टोरीबोर्ड स्थिर कोशिकाओं: dequeueReusableCellWithIdentifier शून्य

UITableViewCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

हमेशा रिटर्न nilcellForRowAtIndexPath: में, स्टोरीबोर्ड, स्थिर कोशिकाओं का उपयोग करना।

सेल के
  • पहचानकर्ता सही ढंग से आईबी/स्टोरीबोर्ड में सेट किया गया है और मैं कोड में एक ही पहचानकर्ता का उपयोग करें:

    मैं निम्नलिखित जाँच कर ली है। मैंने इसे कई बार सत्यापित किया।

  • मैंने दृश्य नियंत्रक को कहीं और नहीं ठहराया है (जो this stackoverflow question में समस्या थी)।

मेरा विचार नियंत्रक UITableViewController का एक उपवर्ग है, जाहिर है, स्टोरीबोर्ड में एक तदर्थ नेविगेशन नियंत्रक में लपेटा। संदेह है कि मेरा व्यू कंट्रोलर किसी भी तरह स्टोरीबोर्ड में परिभाषित सेल पहचानकर्ताओं के बारे में नहीं जानता है क्योंकि यह एक और उदाहरण हो सकता है, यहां कोड "तत्काल" है। prepareForSegue: में, मैं (स्थापित करने के गुण आदि)

CustomViewController *vc = [[[segue destinationViewController] 
    viewControllers] objectAtIndex:0]; 

दृश्य यहाँ किया नियंत्रक के अन्य अनुकूलन का उपयोग ठीक काम करता है।

मैं स्थिर कोशिकाओं का उपयोग कर रहा है क्योंकि वर्गों और पंक्तियों की संख्या में परिवर्तन नहीं होता है, और प्रत्येक कोशिका स्थिर टेक्स्ट है (और अन्य नियंत्रण या पाठ फ़ील्ड संपादित करने के लिए)।

ऐसा लगता है कि यह एक बहुत ही आम कार्य है (दृश्य नियंत्रक के डेटासोर्स विधियों में स्टोरीबोर्ड से स्थिर कोशिकाओं को अनुकूलित करें)। मैं क्या गलत कर रहा हूं?

+0

आपको हमें यह दिखाना होगा कि आप वास्तव में अपना कस्टम सेल कहां प्रबंधित करते हैं। यह महत्वपूर्ण हिस्सा है। – borrrden

+0

मैं स्टोरीबोर्ड में कस्टम सेल बना देता हूं। "कस्टम" टाइप करें और इसका स्वयं का सेल पहचानकर्ता। क्या यह ऐसा काम नहीं करता है? – Mundi

+0

मुझे पूरे स्थैतिक भाग को याद किया गया। स्टेटिक कोशिकाओं को पूरी तरह से स्टोरीबोर्ड में डिज़ाइन किया गया है। इस उत्कृष्ट ट्यूटोरियल के भाग 2 देखें www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2 – borrrden

उत्तर

44

तालिका दृश्य में स्थिर सामग्री के साथ, आप किसी भी डेटास्रोत विधियों को लागू नहीं करते हैं (tableView:cellForRowAtIndexPath: समेत, इसलिए आप कभी भी कोशिकाओं को खाली नहीं करेंगे। स्थिर सामग्री के लिए कोई डेक्यूइंग नहीं है (जिसे आप वैसे भी शामिल कर सकते हैं) ।

आप एक विशेष सेल करने के लिए एक सूचक प्राप्त करना चाहते हैं: cellForRowAtIndexPath: का उपयोग कर

  • तालिका दृश्य से इसे पाने:

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    
  • विशिष्ट सेल के लिए आउटलेट है और इसे सीधे अनुकूलित करें। कोशिकाओं के माध्यम से

  • दोहराएं और reuseIdentifier संपत्ति की जांच सेल आप में रुचि रखते हैं प्राप्त करने के लिए।

इन बातों का कोई भी viewWillAppear या इसी तरह से किया जा सकता।

आप स्टोरीबोर्ड पर पाया गया कि करने के लिए अपने कोशिकाओं में पूरी तरह से अलग सामग्री को देना चाहते हैं तो स्थिर कोशिकाओं शायद सही विकल्प नहीं हैं। आपको पारंपरिक डेटा स्रोत विधियों के साथ गतिशील प्रोटोटाइप (नोट करें कि स्टोरीबोर्ड में एकाधिक प्रोटोटाइप हो सकते हैं) का उपयोग करना चाहिए।

+0

धन्यवाद - इसलिए मैं जो करना चाहता हूं उसके लिए मुझे लगता है कि मुझे वास्तव में प्रोटोटाइप कोशिकाओं का उपयोग करने की आवश्यकता है। क्या आप इसे अपने उत्तर में जोड़ सकते हैं, तो मैं इसे देख सकता हूं? आपकी स्पष्टीकरण के लिए धन्यवाद! – Mundi

+0

मेरा जवाब संपादित किया, आपने वास्तव में यह नहीं कहा कि आप क्या करने की कोशिश कर रहे थे, इसलिए उम्मीद है कि इससे मदद मिलती है! – jrturton

+0

मैं कुछ कोशिकाओं में स्थिर शीर्षक लेबल और संपादन योग्य टेक्स्ट फ़ील्ड, और दूसरों में कुछ अन्य नियंत्रण रखने की कोशिश कर रहा हूं। मैंने सोचा कि आप डेटा को गतिशील रूप से स्थिर कोशिकाओं में भर सकते हैं। कोशिकाओं की संख्या या स्थिति बदल नहीं है। मैंने प्रोटोटाइप कोशिकाओं के साथ ऐसा करना शुरू कर दिया है, और यह इतना काम है - स्टोरीबोर्ड से पहले भी बदतर! – Mundi

0

समाधान स्थिर कोशिकाओं की बजाय प्रोटोटाइप कोशिकाओं का उपयोग करना था। मैं अभी भी @jrturton को चेक दे रहा हूं क्योंकि वह पहला व्यक्ति था जिसने मुझे यह विचार दिया था।

एक और दिलचस्प त्रुटि मैंने अभी हल किया है: "कस्टम" प्रकार के प्रोटोटाइप कोशिकाओं के साथ, यदि आप पाठ के साथ cell.textLabel भरने का प्रयास करते हैं, तो यह स्वचालित रूप से काम करेगा, लेकिन आपके सभी अन्य सबव्यूज़ बहुत अजीब तरीके से व्यवहार करते हैं। मैं अभी अपने कस्टम लेबल का उपयोग करता हूं, और सब कुछ ठीक काम करता है।

चीयर्स, मदद करने के लिए सभी को धन्यवाद।

+0

आपने "कस्टम" सेल का उपयोग कैसे किया? क्योंकि dequeueReusableCellWithIdentifier शून्य वापस आती है? –

+0

आप इंटरफ़ेस बिल्डर में "कस्टम" निर्दिष्ट कर सकते हैं। – Mundi

+0

मैंने कस्टम इंटरफ़ेस बिल्डर में कस्टम निर्दिष्ट किया था, फिर मैंने UITableViewCell को उपclassed और इस सेल को सौंपा। लेकिन यह खाली गतिशील कोशिकाओं लाता है। –

0

जवाब ऊपर करने के लिए अलग,

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

काम नहीं करेगा। लेकिन cell पर आउटलेट बनाने का उल्लिखित तरीका स्वयं काम कर रहा है।

या UITextFields जैसे cell पर विचारों को भी रखना संभव है और उन लोगों के लिए आउटलेट भी हैं।

संयोजन दोनों तरीकों का भी उपयोग किया जा सकता है। जैसे किसी विशेष सेल के लिए cell.textLabel.text सेट करें और एक और नियंत्रण रखें जिसे नियंत्रण आउटलेट से एक्सेस किया जाएगा।

0

स्टोरीबोर्ड में, स्टेटिक सेल <UITableViewDataSource> प्रोटोकॉल में विधियों को लागू नहीं कर सकते हैं।

तो आप उन विधियों का उपयोग कर सकते हैं जिनमें <UITableViewDelegate> शामिल हैं।

0

आप अभी भी स्थिर UITableView के डेटासोर्स/प्रतिनिधि विधियों का उपयोग कर सकते हैं, तो आपको नई कोशिकाएं बनाने की आवश्यकता नहीं है।

आप cellForRowAtIndexPath: अंदर, डेटा स्रोत के तरीकों के साथ कोशिकाओं को संशोधित करना चाहते हैं:

UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

और फिर सेल को संशोधित करने शुरू करते हैं।

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