2015-11-23 7 views
14

नहीं दिखाई दे रहा प्रकोष्ठों मैं वहाँ के रूप में मेरी सरणी में तार कर रहे हैं buttons साथ के रूप में कई collectionViewCells प्रदर्शित करना चाहते हैं। लेकिन जब मैं सिम्युलेटर शुरू सिर्फ CollectionView की पृष्ठभूमि, लेकिन कोई कोशिकाओं से पता चला है। त्रुटि क्या हो सकती है?संग्रह देखें

class CollectionViewController: UICollectionViewController { 

var Array = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    Array = ["1","2","3","4","5"] 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int) -> Int { 
    return Array.count 
} 

override func 
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

     var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell 

     var button = cell.viewWithTag(1) as! UIButton 
     button.titleLabel?.text = Array[indexPath.row] 

     return cell 
} 

}

ये संग्रह देखें नियंत्रक के कनेक्शन हैं:

connections

यहाँ है कि मैं main.storyboard में CollectionView से जुड़ी मेरी CollectionViewController से कोड है

देखें स्टोरीबोर्ड पर नियंत्रक:

viewcontroller

+0

यह एक ऑटो लेआउट मुद्दा अगर आप स्टोरीबोर्ड का उपयोग कर रहे हो सकता है। क्या आप स्टोरीबोर्ड पर दृश्य नियंत्रक का स्क्रीनशॉट और लेआउट विकल्पों के स्कैनशॉट भी दिखा सकते हैं? – Subash

+0

मैंने ऑटो लेआउट अक्षम करने की कोशिश की और अभी भी वही समस्या थी। लेआउट विकल्पों के साथ आपका क्या मतलब है? मैंने स्टोरीबोर्ड – maidi

+0

पर व्यू कंट्रोलर का एक स्क्रीनशॉट जोड़ा है क्या आपको स्टोरीबोर्ड में कंट्रोलर की कस्टम क्लास को अपने कलेक्शन व्यू कंट्रोलर पर सेट करने के लिए याद किया गया है? – Michael

उत्तर

3
func layoutCells() { 
     let layout = UICollectionViewFlowLayout() 
     layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10) 
     layout.minimumInteritemSpacing = 5.0 
     layout.minimumLineSpacing = 5.0 
     layout.itemSize = CGSize(width: (UIScreen.mainScreen().bounds.size.width - 40)/3, height: ((UIScreen.mainScreen().bounds.size.width - 40)/3)) 
     collectionView!.collectionViewLayout = layout 
    } 

इस प्रयास करें। लोड से इस फ़ंक्शन को कॉल करें। मुझे लगता है कि समस्या यह है कि आपका संग्रह सही ढंग से नहीं रखा गया है।

func viewDidLoad() { 
    layoutCells() 
} 

यह आप अपनी जरूरतों को पूरा करने के लिए लेआउट विकल्प संशोधित कर सकते हैं काम करता है।

+1

अफसोस की बात है कि अभी भी वही समस्या है। केवल पृष्ठभूमि सिम्युलेटर – maidi

+0

में दिखाया गया है क्या यह सेल या दृश्य की पृष्ठभूमि दिखाता है? – Subash

+0

दृश्य, इसलिए यह केवल एक हल्की बैंगनी स्क्रीन दिखाता है – maidi

10

आप स्टोरीबोर्ड पहचान निरीक्षक को CollectionViewController सेट किया है? :)

और viewDidLoad विधि में डेटा बदलने के बाद मैं reloadData() पर कॉल करने का प्रयास करूंगा।

आशा है कि

1

विचार में मदद करता है:

  • जांच करें कि अपने सेल पुन: उपयोग पहचानकर्ता की स्थापना की है।
  • चेक आप स्टोरीबोर्ड में सही ढंग से संग्रह को देखने के उपवर्ग निर्धारित किया है तो।
  • अपने cellForItemAtIndexPath समारोह अंदर print बयान रखो अगर यह कभी बुलाया जा रहा है देखने के लिए।
  • सुनिश्चित नहीं हैं कि अगर यह एक मुद्दा होना चाहिए, लेकिन Array वास्तव में स्विफ्ट में एक प्रकार है। इसका उपयोग करके आपका वैरिएबल नाम किसी भी तरह तर्क के साथ गड़बड़ हो सकता है। इसे array (लोअरकेस) पर पुनर्नामित करें। मुझे विश्वास है कि वैरिएबल नामों के लिए यह सबसे अच्छा अभ्यास है।
  • ऐसी पृष्ठभूमि रंग बदलने के रूप में cellForItemAtIndexPath में सेल करने के लिए कुछ और करते हैं,। यदि यह काम करता है, तो हो सकता है कि आप टैग के साथ क्या कर रहे हैं उसके साथ कुछ गलत हो।
1

आपकी समस्या

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int)

विधि हस्ताक्षर में है। यह गलत है।यह होना चाहिए

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

और override विनिर्देशन के साथ (क्योंकि UICollectionViewController ही है, यह कारण है कि आप खाली संग्रह मिल)।

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return Array.count 
} 
1

सबसे पहले जाँच आप इस विधि का इस्तेमाल किया है: -

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
return searches.count 
} 

खंड प्रति एक खोज होती है, इसलिए वर्गों की संख्या खोजें सरणी की गिनती है। तो भी हम प्रति इस method.by डिफ़ॉल्ट की जरूरत के रूप में उपयोग करते हैं, हम retuen 1

का उपयोग और बेहतर soluation Check this link

+0

प्रोटोकॉल के लिए डिफ़ॉल्ट कार्यान्वयन 1 लौटाता है, इसलिए यह नहीं हो सकता है। –

+0

ओह हाँ @ TomaszBąk प्रति अनुभाग एक खोज है, इसलिए अनुभागों की संख्या खोज सरणी की गिनती है। इसलिए हम इस विधि की आवश्यकता के अनुसार भी उपयोग कर सकते हैं। और धन्यवाद सुधार क्योंकि इसकी मदद बेहतर समझने के लिए है। –

1

के लिए लिंक में कदम का पालन कर सकते हैं स्टोरीबोर्ड में UIButton का चयन कर सकते हैं नीचे बाएँ के रूप में देखने के installed नीचे दी गई छवि में।

enter image description here

3

समस्या बटन के लिए शीर्षक की स्थापना, निम्नलिखित कोड का उपयोग के साथ है।

override func 
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

     var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell 

     var button = cell.viewWithTag(1) as! UIButton 
     //button.titleLabel?.text = Array[indexPath.row] 
     button.setTitle(Array[indexPath.row], forState: UIControlState.Normal) 
     return cell 
} 

आशा है कि यह मदद करता है

1

सुनिश्चित करें कि आप सेल के लिए सही पुन: उपयोग पहचानकर्ता सेट किया हुआ है।

enter image description here

2

मैं एक ऐसी ही समस्या थी, मैं यह है कि किसी भी तरह मेरे सेल के आकार पर रोक लगा दिया गया था पाया। उम्मीद है की यह मदद करेगा।

Select the CollectionViewCell

Find this values in size inspector

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