2013-03-03 9 views
63

जोड़ते समय जब मैं इंटरफेस बिल्डर में UICollectionCellUICollectionView डालता हूं तो मैं इसे अज्ञात कारणों से नहीं डाल सकता।UICollectionView UICollectionCell

  • iOS SDK 6.0
  • XCode 4.5.1
  • मैं स्टोरीबोर्ड
+0

[यहां एक सरल walkthrough] (http://stackoverflow.com/a/31735229/3681880) 'UICollectionViewCell' को 'UICollectionView' में बनाने के लिए) है। – Suragch

उत्तर

130

केवल UICollectionView स्टोरीबोर्ड अंदर UICollectionViewCell अंदर है का उपयोग कर बाहर के साथ एक कस्टम UICollectionViewCell का कार्यान्वयन है। यदि XIB का उपयोग करें, तो CellName.xib के साथ एक नया XIB बनाएं, इसमें CollectionViewCell जोड़ें, UICollectionView कस्टम क्लास का नाम निर्दिष्ट करें। उसके बाद रजिस्टरNib का उपयोग करें।

नमूना कोड: https://github.com/lequysang/TestCollectionViewWithXIB

+0

@NAQ ठीक है, आप अपनी कक्षा का उपयोग कैसे करते हैं? सुनिश्चित करें कि आपने अपनी निब पंजीकृत की है जो किसी वर्ग से जुड़ा हुआ है, लेकिन कक्षा initWithFrame को नहीं बुलाया जाता है। इसलिए यदि आप init पर अपने xib आउटलेट पर कुछ अतिरिक्त स्टाइल नहीं कर सका। इस उदाहरण में माईसेल क्लास रखने का क्या फायदा है? – topwik

+1

initWithFrame किसी भी ज़िब सेल में काम नहीं करता है। MyCell.h को आईबीओलेट को हुक अप करें और जागने में अन्य विधियों को कॉल करें। –

+6

मुझे आश्चर्य है कि ऐप्पल दस्तावेज़ीकरण में इसका उल्लेख करने के लिए पर्याप्त दयालु नहीं था। मेरे जीवन के -1 घंटे। – expert

18
का उपयोग नहीं करते: सेल मैं उपयोग कर रहा हूँ UICollectionView

को जोड़ने के बिना उपकरण पट्टी करने के लिए जा रहा है

यदि आप Xib फ़ाइल का उपयोग कर रहे हैं तो आप UICollectionViewCell पर सीधे UiCollectionView पर नहीं डाल सकते हैं। यह केवल स्टोरीबोर्ड में संभव है। एक अलग Xib फ़ाइल में UICollectionViewCell जोड़ें। अपना वर्ग का नाम दें। तो फिर या तो वर्ग या xib से पहले संग्रह दृश्य का प्रकटन

[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:CELL_ID]; 

आमतौर पर यह viewDidLoad में किया जाता है रजिस्टर।

यह Xib

@implementation CollectionViewCell 
@synthesize imageView = _imageView; 

- (id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 

    self.backgroundColor = [UIColor whiteColor]; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowRadius = 5.0f; 
    self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); 
    self.layer.shadowOpacity = 0.5f; 

    // Selected background view 
    UIView *backgroundView = [[UIView alloc]initWithFrame:self.bounds]; 
    backgroundView.layer.borderColor = [[UIColor colorWithRed:0.529 green:0.808 blue:0.922 alpha:1]CGColor]; 
    backgroundView.layer.borderWidth = 10.0f; 
    self.selectedBackgroundView = backgroundView; 

    // set content view 
    CGRect frame = CGRectMake(self.bounds.origin.x+5, self.bounds.origin.y+5, self.bounds.size.width-10, self.bounds.size.height-10); 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; 
    self.imageView = imageView;   
    [imageView release]; 
    self.imageView.contentMode = UIViewContentModeScaleAspectFill ; 
    self.imageView.clipsToBounds = YES; 
    [self.contentView addSubview:self.imageView];  

} 
return self; 
} 
+0

यदि आप एक xib का उपयोग कर रहे हैं जिसके लिए आप कक्षा निर्दिष्ट करते हैं तो आप क्या करेंगे? मेरे पास मेरी सेल xib की कस्टम क्लास के रूप में एक UICollectionViewCell क्लास है। मैं nibName firCellWithResueIdentifier के साथ nibName पंजीकृत करता हूंडिडलोड (फिर से xib एक सेल क्लास से जुड़ा/जुड़ा हुआ है)। क्या मैं अपने सेल क्लास का उपयोग कर कोड में किए गए अतिरिक्त अनुकूलन के साथ एक xib लेआउट गठबंधन कर सकता हूं? ऐसा लगता है कि सीधे ऊपर प्रवाह प्रवाह में प्रवेश नहीं करेगा यदि आप सिर्फ निब पंजीकृत करते हैं तो कक्षा में।क्या मुझे अपने संग्रह दृश्य के साथ दोनों निब और कक्षा पंजीकृत करना है? – topwik

+0

@towpse initWithFrame को सेल.एम. में जागने के लिए प्रतिस्थापित करें। –

+0

@towpse वापस न करें NAQ ने कहा क्या सही है। निब पंजीकृत करें। फिर अतिरिक्त अनुकूलन के लिए initWithCoder या awakeFromNib अपने कस्टम सेल (cell.m में) –

0

ठीक है।

  1. एक स्टोरीबोर्ड बनाएं: वहाँ वास्तव में यदि आप वास्तव में इंटरफ़ेस बिल्डर से xib फ़ाइल के अंदर collectionView में सेल करना चाहते थे, इस के लिए एक समाधान नहीं है।
  2. इंटरफ़ेस बिल्डर से UICollectionView और UICollectionViewCell बनाएं।
  3. यूआई को बाधाओं के साथ समायोजित करें ताकि यह ठीक दिख सके कि आप इसे क्या चाहते हैं।
  4. एक नई xib फ़ाइल बनाएं।
  5. स्टोरीबोर्ड के अंदर सबकुछ नई xib फ़ाइल में कॉपी करें।

यह पूरी तरह से काम करेगा।

  • एक बात मन में है कि कदम # 3 बहुत महत्वपूर्ण है, क्योंकि # 5 के बाद आप खींचें और UICollectionView चारों ओर ले जाने की अपेक्षा की नहीं कर रहे हैं रखने के लिए, यदि आप ऐसा करेंगे, सेल जादुई गायब हो जाएगा! इसके अलावा, यह पूरी तरह से काम करेगा।