2013-07-12 13 views
9

मैं की जरूरत है स्थिर और गतिशील वर्गों मिश्रण एक समूहीकृत UITableView सेटिंग ऐप्स में ट्विटर खातों के लिए एक के समान:एक समूहीकृत तालिका दृश्य

Twitter accounts

है, फ़ॉर्म या मेनू जहां से कुछ का एक प्रकार खंडों में स्थैतिक कोशिकाओं का पहले से ज्ञात सेट होता है, और कुछ अन्य वर्गों को गतिशील होना होता है और अतिरिक्त पंक्तियों को "खाता जोड़ें" के समान तरीके से डालने की अनुमति मिलती है। मैं .xib फ़ाइल में UITableView का प्रबंधन कर रहा हूं। स्थिर कोशिकाओं के लिए, मैंने .xib फ़ाइलों को अलग कर दिया है जिन्हें मैं दृश्य नियंत्रक में cellForRowAtIndexPath: विधि में लोड कर सकता हूं।

मुझे इस तरह की तालिका को कैसे संभालना चाहिए? मुझे कोई उदाहरण कोड नहीं मिला है।

cellForRowAtIndexPath: विधि कैसा दिखना चाहिए? क्या मुझे स्थैतिक कोशिकाओं के लिए strong गुण रखने की आवश्यकता है? क्या प्रत्येक स्थैतिक सेल को उसी .xib फ़ाइल में सीधे तालिका डिज़ाइन करने के लिए बेहतर होगा, और उनके लिए आउटलेट सेट करने के लिए बेहतर होगा? (हालांकि यह मेरे कस्टम सेल डिज़ाइन का पुन: उपयोग करने की अनुमति नहीं देता है ...)

मुझे इसे प्राप्त करने और सही ढंग से सेल और मेमोरी प्रबंधित करने के लिए कुछ दिशानिर्देशों की आवश्यकता है। अग्रिम धन्यवाद

+0

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

+0

@rdelmar ठीक है, हो सकता है कि मैं गलत तरीके से चीजों का नाम दे रहा हूं ... मैं "स्थैतिक" और "गतिशील" के साथ क्या मतलब करना चाहता हूं, सिर्फ यह है कि मेरे पास ऐसे अनुभागों का एक समूह है जिनकी कोशिकाएं मुझे पहले से ही पता है और नहीं बदलेगी (स्क्रीनशॉट में ट्विटर लोगो सेल और "अपडेट अपडेट" सेल के रूप में), और अनुभागों का एक और सेट जिसमें कोशिकाओं का एक चर सेट होगा क्योंकि उपयोगकर्ता नई जानकारी प्रदान करते हैं (जैसे "खाता जोड़ें") – AppsDev

+0

@rdelmar चूंकि मौजूद हैं उदाहरण के लिए मुझे क्या चाहिए (स्क्रीनशॉट मैंने प्रदान किया है, और फोन ऐप में "नई संपर्क" कार्यक्षमता के उदाहरण), ऐसा करना संभव होगा ... सवाल यह है कि कैसे? मैं स्टोरीबोर्ड का उपयोग नहीं कर रहा हूं ... – AppsDev

उत्तर

27

डायनामिक प्रोटोटाइप कोशिकाएं स्थिर की तरह व्यवहार कर सकती हैं यदि आप सेलफॉररोएट इंडेक्सपैथ में किसी भी सामग्री को जोड़ने के बिना सेल वापस लौटते हैं, तो आपके पास "स्थैतिक जैसे" सेल और गतिशील वाले दोनों हो सकते हैं (जहां पंक्तियों और सामग्री की संख्या परिवर्तनीय होती है) गतिशील प्रोटोटाइप का उपयोग करके।

नीचे दिए गए उदाहरण में, मैंने आईबी में एक तालिका दृश्य नियंत्रक के साथ शुरुआत की (समूहबद्ध तालिका दृश्य के साथ), और गतिशील प्रोटोटाइप कोशिकाओं की संख्या को 3 में बदल दिया। मैंने पहले सेल के आकार को 80 तक समायोजित किया, और जोड़ा एक UIImageView और दो लेबल। मध्य सेल एक मूल शैली कक्ष है, और अंतिम एक एकल केंद्र वाला एक और कस्टम सेल है। मैंने उन्हें अपना स्वयं का पहचानकर्ता दिया।

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five"]; 
    [self.tableView reloadData]; 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 3; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (section == 1) 
     return self.theData.count; 
    return 1; 
} 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == 0) 
     return 80; 
    return 44; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell; 

    if (indexPath.section == 0) { 
     cell = [tableView dequeueReusableCellWithIdentifier:@"TitleCell" forIndexPath:indexPath]; 

    }else if (indexPath.section == 1) { 
     cell = [tableView dequeueReusableCellWithIdentifier:@"DataCell" forIndexPath:indexPath]; 
     cell.textLabel.text = self.theData[indexPath.row]; 

    }else if (indexPath.section == 2) { 
     cell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell" forIndexPath:indexPath]; 
    } 

    return cell; 
} 

आप देख सकते हैं, कोशिकाओं "की तरह स्थिर", मैं सिर्फ लौटने के लिए:

enter image description here

तब कोड में, मैं इस किया था: यह यह क्या लग रहा है आईबी में की तरह है सही पहचानकर्ता के साथ सेल, और मैं ठीक उसी तरह प्राप्त करता हूं जो मैंने आईबी में स्थापित किया था। रनटाइम का परिणाम आपकी पोस्ट की गई छवि की तरह तीन खंडों के साथ दिखाई देगा।

+0

वर्णित किया है, स्पष्टीकरण और कोड स्निपेट के लिए धन्यवाद, मैं बस वही उपस्थिति और कार्यक्षमता प्राप्त करना चाहता हूं। यदि आईबी में कोशिकाओं को आउटलेट के रूप में रखने के बजाय, मैं उन्हें अपनी 'xib' फ़ाइल से लोड करता हूं (अन्य तालिकाओं में सेल कस्टम शैली का पुन: उपयोग करने में सक्षम होने के लिए),' cellForRowAtIndexPath: 'विधि कैसा दिखना चाहिए? मुझे कोशिकाओं को मजबूत गुणों से जोड़ने की ज़रूरत है? – AppsDev

+1

@AppsDev, यह कोई अलग नहीं दिखता है। आपको सिर्फ डीआईडी ​​लोड में nibs को पंजीकृत करना होगा। इसलिए प्रत्येक प्रकार के सेल के लिए आपको कुछ लिखना होगा: [self.tableView registerNib: [UINib nibWithNibName: @ "YourNibNameHere" बंडल: nil] forCellReuseIdentifier: @ "TitleCell"]; आपको किसी भी संपत्ति की आवश्यकता नहीं है। – rdelmar

+0

धन्यवाद! फिर यदि मैं अपने कस्टम सेल के भीतर नियंत्रणों तक पहुंच बनाना चाहता हूं (मेरे पास टेक्स्ट फ़ील्ड्स और स्विच हैं), तो प्रत्येक व्यक्तिगत सेल के संदर्भों को रखने के बजाय, आवश्यकतानुसार तालिका में सेल्स को देखना बेहतर होगा? – AppsDev

2

स्टेटिक केवल गतिशील लेआउट के शीर्ष पर एक प्रावधान है। मूल रूप से स्थैतिक एक WYSIWYG है।

यदि आप मूल्यों के साथ प्रयोग करने के लिए प्रतिरोधी नहीं हैं, तो मैं गतिशील जाने की अनुशंसा करता हूं। सैकड़ों उदाहरण उपलब्ध हैं, जैसे this और this

आप आगे जाना रूप में, आप जब गतिशील तालिका विचारों को अनुकूलित कर अपने आप को दो विकल्प की दिशा में अपसारी देखना होगा:

  • उपवर्ग UITableViewCell (और अधिक प्रयास है, लेकिन लंबे समय में अच्छा)। फिर, this का पालन करें।
  • UITableViewCell गुणों के साथ खेलने cellForRowAtIndexPath अंदर: (कम प्रयास और त्वरित परिणाम लेकिन हो सकता है या प्रदर्शन के अनुकूल संभव redrawing की वजह से नहीं हो सकता है)

संभावनाओं, अनंत हैं इस तरह के here के रूप में जहां सेल पृष्ठभूमि दृश्य अनुकूलित है ।

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