इस प्रोजेक्ट का Xcode 10 और Swift 4.2 के साथ परीक्षण किया गया है।
एक नया प्रोजेक्ट बनाएं
यह सिर्फ सिंगल व्यू ऐप हो सकता है।
कोड जोड़ें
एक नया कोको टच क्लास फ़ाइल बनाएँ (फ़ाइल> नया> फ़ाइल ...> iOS> कोको टच क्लास)। नाम बताइए MyCollectionViewCell
। यह वर्ग उन विचारों के लिए आउटलेट रखेगा जो आप स्टोरीबोर्ड में अपने सेल में जोड़ते हैं।
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var myLabel: UILabel!
}
हम इस आउटलेट को बाद में कनेक्ट करेंगे।
ViewController.swift खोलें और सुनिश्चित करें कि आपके पास निम्नलिखित सामग्री है:
import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard
var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"]
// MARK: - UICollectionViewDataSource protocol
// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell
// Use the outlet in our custom class to get a reference to the UILabel in the cell
cell.myLabel.text = self.items[indexPath.item]
cell.backgroundColor = UIColor.cyan // make cell more visible in our example project
return cell
}
// MARK: - UICollectionViewDelegate protocol
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// handle tap events
print("You selected cell #\(indexPath.item)!")
}
}
टिप्पणियाँ
UICollectionViewDataSource
और UICollectionViewDelegate
प्रोटोकॉल हैं जो संग्रह दृश्य का अनुसरण करते हैं। आप UICollectionViewFlowLayout
प्रोग्राम के आकार को प्रोग्रामेटिक रूप से बदलने के लिए प्रोटोकॉल भी जोड़ सकते हैं , लेकिन यह आवश्यक नहीं है।
- हम सिर्फ अपने ग्रिड में सरल तार डाल रहे हैं, लेकिन आप निश्चित रूप से बाद में छवियां कर सकते हैं।
स्टोरीबोर्ड सेट करें
अपने स्टोरीबोर्ड में संग्रह व्यू को देखने के लिए एक संग्रह खींचें। यदि आप चाहें तो इसे मूल दृश्य को भरने के लिए आप बाधाओं को जोड़ सकते हैं।
सुनिश्चित करें कि विशेषता निरीक्षक में आपकी चूक भी हैं
कलेक्शन व्यू के ऊपरी बाएं छोटा बॉक्स एक कलेक्शन व्यू सेल है। हम इसे अपने प्रोटोटाइप सेल के रूप में उपयोग करेंगे। सेल में एक लेबल खींचें और इसे केंद्र में रखें। आप सेल बॉर्डर का आकार बदल सकते हैं और यदि आप चाहें तो लेबल को केंद्रित करने के लिए बाधाओं को जोड़ सकते हैं।
संग्रह देखें सेल के लिए गुण निरीक्षक के पहचानकर्ता बॉक्स में "सेल" (बिना उद्धरण के) लिखें। ध्यान दें कि यह let reuseIdentifier = "cell"
ViewController.swift के समान मूल्य है ।
और सेल के लिए आइडेंटिटी इंस्पेक्टर में, क्लास का नाम MyCollectionViewCell
, हमारी कस्टम क्लास जिसे हमने बनाया है , सेट करें ।
आउटलेट्स को हुक करें
- कक्षा
myLabel
में संग्रह कक्ष में लेबल को हुक करें MyCollectionViewCell
। (आप नियंत्रण-ड्रैग कर सकते हैं ।)
- संग्रह दृश्य
delegate
और dataSource
दृश्य नियंत्रक को हुक करें । (डॉक्यूमेंट आउटलाइन में कलेक्शन व्यू पर राइट क्लिक करें। फिर व्यू कंट्रोलर तक प्लस ऐरो को क्लिक करें और खींचें।)
ख़त्म होना
सेल में लेबल को केंद्र में जोड़ने और अभिभावक की दीवारों पर संग्रह दृश्य को पिन करने के बाद बाधाओं को जोड़ने के बाद यह कैसा दिखता है।
सुधार करना
उपरोक्त उदाहरण काम करता है लेकिन यह बदसूरत है। यहाँ कुछ चीजें हैं जिनसे आप खेल सकते हैं:
पीछे का रंग
इंटरफ़ेस बिल्डर में, अपने संग्रह दृश्य पर जाएं> निरीक्षक विशेषताएँ> दृश्य> पृष्ठभूमि देखें ।
सेल रिक्ति
कोशिकाओं के बीच न्यूनतम अंतर को कम मूल्य में बदलने से यह बेहतर दिखता है। इंटरफ़ेस बिल्डर में, अपने संग्रह दृश्य> आकार निरीक्षक> न्यूनतम रिक्ति पर जाएं और मानों को छोटा करें। "कोशिकाओं के लिए" क्षैतिज दूरी है और "लाइनों के लिए" ऊर्ध्वाधर दूरी है।
कोशिका का आकार
यदि आप गोल कोनों, एक सीमा, और इसी तरह चाहते हैं, तो आप सेल के साथ खेल सकते हैं layer
। यहाँ कुछ नमूना कोड है। आप इसे सीधे cell.backgroundColor = UIColor.cyan
ऊपर कोड में डालेंगे।
cell.layer.borderColor = UIColor.black.cgColor
cell.layer.borderWidth = 1
cell.layer.cornerRadius = 8
अन्य चीजों के लिए यह उत्तर देखें जो आप परत (छाया, उदाहरण के लिए) के साथ कर सकते हैं।
टैप करने पर रंग बदलना
यह बेहतर उपयोगकर्ता अनुभव के लिए बनाता है जब कोशिकाएं नल से नेत्रहीन प्रतिक्रिया करती हैं। इसे प्राप्त करने का एक तरीका पृष्ठभूमि के रंग को बदलना है जबकि सेल को छुआ जा रहा है। ऐसा करने के लिए, अपनी ViewController
कक्षा में निम्नलिखित दो विधियाँ जोड़ें :
// change background color when user touches cell
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = UIColor.red
}
// change background color back when user releases touch
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = UIColor.cyan
}
ये है अपडेटेड लुक:
आगे के अध्ययन
इस Q & A का UITableView संस्करण