Je dois charger les images dans chaque cellule et retourner la cellule Uicollectionview. Mais toutes les images sont chevauchées dans la dernière cellule ..
Lorsque j'ai débogué, l'image est définie dans le gestionnaire d'achèvement et définit l'image une fois que les cellules sont réellement renvoyées. P>
Depuis que j'utilise auto dans le bloc rempli du SD_SetImage, qui indique la dernière cellule lorsque le bloc d'achèvement commence à exécuter, de sorte que toutes les images sont définies dans la même cellule, je suppose .. p>
soit je dois régler l'image avant La cellule est renvoyée, ou int son bloc d'achèvement alors qu'il se définit doit avoir la référence appropriée à la cellule. Comment faire cela .... p>
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { cell = collectionView.dequeueReusableCell(withReuseIdentifier: CELL_IDENTIFIER, for: indexPath) as? CollectionViewCell var row = 0 row = indexPath.row let imageView = UIImageView() var imgURL: String? = nil if let object = (dataSource[row] as? [AnyHashable : Any])?["src"] { imgURL = "\(object)" } let url = URL(string: imgURL ?? "") imageView.sd_setImage(with: url, placeholderImage: UIImage(named: "placeholder.png"), completed: { [weak self] (image, error, cacheType, imageURL) in self?.cell?.cellImageView.image = imageView.image }) imageView.contentMode = .scaleAspectFill var shoptitle: String? = nil if let object = (dataSource[row] as? [AnyHashable : Any])?["shop_name"] { shoptitle = "\(object)" } cell?.txtDescription.text = shoptitle cell?.shareIcon.tag = indexPath.item cell?.cellImageView.tag = indexPath.item cell?.cellImageView.isUserInteractionEnabled = true cell?.shareIcon.addTarget(self, action: #selector(click(_:)), for: .touchUpInside) cell?.layer.shadowOpacity = 0.5 cell?.layer.shadowOffset = CGSize(width: 1.0, height: 1.0) cell?.layer.shadowRadius = 10.0 cell?.layer.shadowColor = UIColor.gray.cgColor return cell! }
3 Réponses :
Avez-vous essayé de supprimer cette ligne de code? P>
auto? .Cell? .CellImageView.Image = imageview.Image code> p>
Je ne l'ai pas essayé. Mais la solution de Hoquasse Ekramul a travaillé pour moi. Je vous remercie
Si sa ne fonctionne pas que simplement définir une image sur COREL.CELIMAGEVIEW CODE> Comme ceci:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
cell = collectionView.dequeueReusableCell(withReuseIdentifier: CELL_IDENTIFIER, for: indexPath) as? CollectionViewCell
var row = 0
row = indexPath.row
let imageView = UIImageView()
var imgURL: String? = nil
if let object = (dataSource[row] as? [AnyHashable : Any])?["src"] {
imgURL = "\(object)"
}
let url = URL(string: imgURL ?? "")
cell.cellImageView.sd_setImage(with: url, placeholderImage: UIImage(named: "placeholder.png"), completed: {
[weak self] (image, error, cacheType, imageURL)
in
})
imageView.contentMode = .scaleAspectFill
var shoptitle: String? = nil
if let object = (dataSource[row] as? [AnyHashable : Any])?["shop_name"] {
shoptitle = "\(object)"
}
cell?.txtDescription.text = shoptitle
cell?.shareIcon.tag = indexPath.item
cell?.cellImageView.tag = indexPath.item
cell?.cellImageView.isUserInteractionEnabled = true
cell?.shareIcon.addTarget(self, action: #selector(click(_:)), for: .touchUpInside)
cell?.layer.shadowOpacity = 0.5
cell?.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
cell?.layer.shadowRadius = 10.0
cell?.layer.shadowColor = UIColor.gray.cgColor
return cell!
}
Veuillez essayer ci-dessous le code avec faire un objet de cellule dans la méthode "CocheForitemat" forte>
Merci Rohit. Je viens d'essayer la solution de Ekramul Huit et ça a fonctionné pour moi. Merci pour votre temps.
Je ne comprends pas pourquoi vous avez utilisé
auto code> pour la cellule. Si je ne me trompe pas, vous pouvez utiliser la cellule comme dans le bloc du gestionnaire sans avoir besoin de
auto code>. De plus, si ce code fonctionne sans erreur, votre VC doit avoir une propriété nommée «cellule», que vous mettez à jour sur chaque rappel.
Soi?
Essayez de faire de l'objet cellulaire dans la méthode "CORELFORITEMAT".
@Loksn Si je ne m'utilise pas moi, je reçois une erreur de compilateur "La référence à la propriété" cellule "en fermeture nécessite" soi-même ". rendre la sémantique de capture explicite ". c'est la raison pour laquelle j'ai fixé la suggestion donnée par Xcode