Comment charger de cellule personnalisé ( xib) dans UICollectionView cellule en utilisant swift
J'ai créé un petit exemple de projet à l'aide de Swift. J'ai créé un "MyCustomView" comme xib qui contient label, button et imageView comme indiqué dans le code ci-dessous:
import UIKit
@IBDesignable class MyCustomView: UIView {
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var btnClick: UIButton!
@IBOutlet weak var myImageView: UIImageView!
var view:UIView!
@IBInspectable
var mytitleLabelText: String? {
get {
return lblName.text
}
set(mytitleLabelText) {
lblName.text = mytitleLabelText
}
}
@IBInspectable
var myCustomImage:UIImage? {
get {
return myImageView.image
}
set(myCustomImage) {
myImageView.image = myCustomImage
}
}
override init(frame : CGRect)
{
super.init(frame: frame)
xibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
xibSetup()
}
func xibSetup()
{
view = loadViewFromNib()
view.frame = self.bounds
//not sure about this ?
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
Attaché à l'image de xib pour la référence.
En StoryBoard -> ViewController ajouté UIViewCollection qui, comme montré dans l'image ci-dessous. Dans ce viewcollection, j'ai besoin que la couleur orange de la cellule à contenir mes personnalisé xib pour être chargé lors de l'exécution.
Comment puis-je y parvenir?
Nouveau code Modifié comme proposé par Sandeep
//1
importation UIKit
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.register(UINib(nibName: "MyCustomView", bundle: nil), forCellWithReuseIdentifier: "myCell")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 7
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell : MyCustomView = collectionView.dequeueReusableCellWithReuseIdentifier("your_reusable_identifier", forIndexPath: indexPath) as! MyCustomView
cell.lblName.text = "MyNewName"
return cell
}
}
//2
importation UIKit
@IBDesignable class MyCustomView: UICollectionViewCell {
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var btnClick: UIButton!
@IBOutlet weak var myImageView: UIImageView!
var view:UIView!
@IBInspectable
var mytitleLabelText: String? {
get {
return lblName.text
}
set(mytitleLabelText) {
lblName.text = mytitleLabelText
}
}
@IBInspectable
var myCustomImage:UIImage? {
get {
return myImageView.image
}
set(myCustomImage) {
myImageView.image = myCustomImage
}
}
}
- Merci de changement de cellule : MyCustomView = collectionView.dequeueReusableCellWithReuseIdentifier("your_reusable_identifier", forIndexPath: indexPath) comme! MyCustomView de laisser la cellule : MyCustomView = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) comme! MyCustomView
Vous devez vous connecter pour publier un commentaire.
sia,
Ici est ce que vous pouvez faire,
Changer votre
MyCustomView
calss être une sous-classe de UICollectionViewCell et pas UIView.Supprimer
override init(frame : CGRect)
,required init?(coder aDecoder: NSCoder)
,func xibSetup()
,func loadViewFromNib() -> UIView
deMyCustomView
J'ai sérieusement ne pouvait pas comprendre comment utilisez-vous votre setter et getter pour mytitleLabelText et myCustomImage. Si sa à rien de s'en débarrasser ainsi.
Enfin, vous serez à gauche avec seulement IBOutlets dans MyCustomView.
Pour une meilleure pratique de codage de changer le nom de MyCustomView à MyCustomCell (facultatif)
Aller à votre xib, sélectionnez le xib et définir sa classe comme MyCustomView.
Heureux de codage. Recherche de tutoriels pour mieux comprendre. Cant expliquer tous les délégués que je vais finir par l'écriture d'un blog ici.
Heureux de codage
cellForItemAt
fonction n'est pas appelée à tous pour une raison quelconque.awakeFromNib
&prepareForInterfaceBuilder
avec unsetup
méthode qui est appelée par ces deux méthodes.Pour Swift 4.0
dans viewDidLoad:
dans cellForItemAt indexPath:
Et n'oubliez pas de l'identificateur de l'ensemble de votre cellule personnalisé dans xib section.
Une approche en ligne si vous devez vous inscrire sur plusieurs cellules.
Étapes sur la façon d'utiliser
Nom de votre Cellule identificateur
"YourcellName" + "Identifier"
par exemple:CustomCellIdentifier
si votre nom de la cellule est CustomCell.CustomCell.register(for: collectionView)
Pour Swift 4.2
dans le viewDidLoad
dans cellForItemAt indexPath:
Et bien sûr, comme @Raj Aryan a dit:
n'oubliez pas de définir un identifiant pour votre cellule personnalisé dans xib section.