Ce projet a été testé avec Xcode 10 et Swift 4.2.
Créer un nouveau projet
Il peut s'agir simplement d'une application à vue unique.
Ajouter le code
Créez un nouveau fichier Cocoa Touch Class (Fichier> Nouveau> Fichier ...> iOS> Cocoa Touch Class). Nommez-le MyCollectionViewCell
. Cette classe contiendra les sorties pour les vues que vous ajoutez à votre cellule dans le storyboard.
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var myLabel: UILabel!
}
Nous connecterons cette prise plus tard.
Ouvrez ViewController.swift et assurez-vous que vous disposez du contenu suivant:
import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
let reuseIdentifier = "cell"
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"]
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell
cell.myLabel.text = self.items[indexPath.row]
cell.backgroundColor = UIColor.cyan
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("You selected cell #\(indexPath.item)!")
}
}
Remarques
UICollectionViewDataSource
et UICollectionViewDelegate
sont les protocoles que la vue de collection suit. Vous pouvez également ajouter le UICollectionViewFlowLayout
protocole pour modifier la taille des vues par programme, mais ce n'est pas nécessaire.
- Nous mettons juste des chaînes simples dans notre grille, mais vous pourrez certainement faire des images plus tard.
Configurer le storyboard
Faites glisser une vue de collection vers le contrôleur de vue de votre storyboard. Vous pouvez ajouter des contraintes pour qu'elle remplisse la vue parente si vous le souhaitez.
Assurez-vous que vos valeurs par défaut dans l'inspecteur d'attributs sont également
- Articles: 1
- Disposition: Flow
La petite boîte en haut à gauche de la vue de collection est une cellule de vue de collection. Nous l'utiliserons comme cellule prototype. Faites glisser une étiquette dans la cellule et centrez-la. Vous pouvez redimensionner les bordures de cellule et ajouter des contraintes pour centrer l'étiquette si vous le souhaitez.
Écrivez «cellule» (sans guillemets) dans la zone Identifiant de l'inspecteur d'attributs pour la cellule de vue de collection. Notez qu'il s'agit de la même valeur que let reuseIdentifier = "cell"
dans ViewController.swift.
Et dans l'inspecteur d'identité de la cellule, définissez le nom de la classe sur MyCollectionViewCell
, notre classe personnalisée que nous avons créée .
Branchez les prises
- Accrochez l'étiquette de la cellule de collection à
myLabel
la MyCollectionViewCell
classe. (Vous pouvez Ctrl-faire glisser .)
- Accrochez la vue de collection
delegate
et dataSource
le contrôleur de vue. (Cliquez avec le bouton droit de la souris sur Vue de collection dans la structure du document. Ensuite, cliquez et faites glisser la flèche plus vers le haut vers le contrôleur de vue.)
Fini
Voici à quoi cela ressemble après avoir ajouté des contraintes pour centrer l'étiquette dans la cellule et épingler la vue de collection aux murs du parent.
Faire des améliorations
L'exemple ci-dessus fonctionne mais il est plutôt moche. Voici quelques éléments avec lesquels vous pouvez jouer:
Couleur de l'arrière plan
Dans l'Interface Builder, accédez à la vue de votre collection> Inspecteur d'attributs> Vue> Arrière-plan .
Espacement des cellules
La modification de l'espacement minimum entre les cellules à une valeur plus petite lui donne une meilleure apparence. Dans le générateur d'interface, accédez à votre vue de collection> Inspecteur de taille> Espacement minimum et réduisez les valeurs. «Pour les cellules» est la distance horizontale et «Pour les lignes» est la distance verticale.
Forme de cellule
Si vous voulez des coins arrondis, une bordure, etc., vous pouvez jouer avec la cellule layer
. Voici un exemple de code. Vous le mettriez directement après cell.backgroundColor = UIColor.cyan
dans le code ci-dessus.
cell.layer.borderColor = UIColor.black.cgColor
cell.layer.borderWidth = 1
cell.layer.cornerRadius = 8
Voir cette réponse pour d'autres choses que vous pouvez faire avec le calque (ombre, par exemple).
Changer la couleur lorsque vous appuyez sur
Cela permet une meilleure expérience utilisateur lorsque les cellules répondent visuellement aux pressions. Une façon d'y parvenir est de changer la couleur d'arrière-plan pendant que la cellule est touchée. Pour ce faire, ajoutez les deux méthodes suivantes à votre ViewController
classe:
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = UIColor.red
}
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = UIColor.cyan
}
Voici le look mis à jour:
Une étude plus approfondie
Version UITableView de ce Q&R