Bu proje Xcode 10 ve Swift 4.2 ile test edilmiştir.
Yeni bir proje oluştur
Sadece bir Tek Görünüm Uygulaması olabilir.
Kodu ekleyin
Yeni bir Cocoa Touch Sınıf dosyası oluşturun (Dosya> Yeni> Dosya ...> iOS> Cocoa Touch Sınıfı). Ad verin MyCollectionViewCell
. Bu sınıf, film şeridinde hücrenize eklediğiniz görünümlerin çıkışlarını tutar.
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var myLabel: UILabel!
}
Bu prizi daha sonra bağlayacağız.
ViewController.swift dosyasını açın ve aşağıdaki içeriğe sahip olduğunuzdan emin olun:
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)!")
}
}
notlar
UICollectionViewDataSource
ve UICollectionViewDelegate
koleksiyon görünümünün izlediği protokollerdir. UICollectionViewFlowLayout
Görünümlerin boyutunu programlı olarak değiştirmek için protokolü de ekleyebilirsiniz , ancak gerekli değildir.
- Sadece ızgaraya basit dizeler koyarız, ancak daha sonra görüntüleri kesinlikle yapabilirsiniz.
Film şeridini ayarla
Koleksiyon Görünümünü film şeridinizdeki Görünüm Denetleyicisine sürükleyin. İsterseniz üst görünümün doldurulması için kısıtlamalar ekleyebilirsiniz.
Özellik Denetçisi'ndeki varsayılan ayarlarınızın da
Koleksiyon Görünümünün sol üst kısmındaki küçük kutu Koleksiyon Görünüm Hücresi'dir. Bunu prototip hücremiz olarak kullanacağız. Bir Etiketi hücreye sürükleyin ve ortalayın. İsterseniz Etiketi ortalamak için hücre kenarlıklarını yeniden boyutlandırabilir ve kısıtlamalar ekleyebilirsiniz.
Koleksiyon görünümü hücresi için öznitelik denetçisinin tanımlayıcı kutusuna "hücre" (tırnak işaretleri olmadan) yazın. Bunun let reuseIdentifier = "cell"
ViewController.swift ile aynı değer olduğunu unutmayın .
Ve hücrenin Kimlik Denetçisinde, sınıf adını MyCollectionViewCell
, yaptığımız özel sınıfa ayarlayın.
Çıkışları bağlayın
- İçin toplama hücrede Etiket Hook
myLabel
içinde MyCollectionViewCell
sınıfında. ( Kontrol tuşuna basıp sürükleyebilirsiniz .)
- Koleksiyon Görünümünü
delegate
ve dataSource
Görünüm Denetleyicisini bağlayın. (Belge Ana Hatları'nda Koleksiyon Görünümü'nü sağ tıklatın. Ardından artı oku tıklatıp Görünüm Denetleyicisine sürükleyin.)
bitmiş
Etiketi hücre içinde ortalamak ve Koleksiyon Görünümü'nü üst duvarlara sabitlemek için kısıtlamalar ekledikten sonra şöyle görünür.
İyileştirmeler Yapma
Yukarıdaki örnek işe yarıyor ama oldukça çirkin. İşte oynayabileceğiniz birkaç şey:
Arka plan rengi
Arayüz Oluşturucu'da, Koleksiyon Görünümü> Özellik Denetçisi> Görünüm> Arka Plan'a gidin .
Hücre aralığı
Hücreler arasındaki minimum boşluğun daha küçük bir değere değiştirilmesi daha iyi görünmesini sağlar. Arayüz Oluşturucu'da, Koleksiyon Görünümü> Boyut Denetçisi> Minimum Aralık'a gidin ve değerleri daha küçük yapın. "Hücreler için" yatay mesafedir ve "Çizgiler için" dikey mesafedir.
Hücre şekli
Yuvarlatılmış köşeler, kenarlık ve benzerleri istiyorsanız, hücre ile oynayabilirsiniz layer
. İşte bazı örnek kod. cell.backgroundColor = UIColor.cyan
Yukarıdaki kodda doğrudan koydunuz .
cell.layer.borderColor = UIColor.black.cgColor
cell.layer.borderWidth = 1
cell.layer.cornerRadius = 8
Katmanla yapabileceğiniz diğer şeyler için bu cevaba bakınız (örneğin gölge).
Dokunulduğunda rengi değiştirme
Hücreler musluklara görsel olarak tepki verdiğinde daha iyi bir kullanıcı deneyimi sağlar. Bunu başarmanın bir yolu, hücreye dokunulurken arka plan rengini değiştirmektir. Bunu yapmak için, ViewController
sınıfınıza aşağıdaki iki yöntemi ekleyin :
// 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
}
İşte güncellenmiş görünüm:
İlerideki çalışma
Bu soru ve cevapların UITableView sürümü