0

J'utilise horizontal collectinview pour afficher les articles. lorsque l'utilisateur sélectionne/désélectionne l'élément que j'ajoute/supprime une bordure blanche sous le texte.auto selected Elément au premier chargement

ici est le code

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    if let cell = collectionView.cellForItem(at: indexPath) { 

     if cell.isSelected { 

      bottomLayer.frame = CGRect(x: 0, y: (cell.frame.height) - 7, width: (cell.frame.width), height: 3) 
      bottomLayer.backgroundColor = UIColor.white.cgColor 
      cell.layer.addSublayer(bottomLayer) 
     } 
    } 
} 


func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 

    if collectionView.cellForItem(at: indexPath) != nil { 

      bottomLayer.backgroundColor = UIColor.green 
    } 
} 

Ce que je veux quand je charge vue collection premier élément doit charger le bottomLayer (avec soulignement)

J'ai essayé le code

let indexPathForFirstRow = IndexPath(row: 0, section: 0) 
CollectionView.selectItem(at: indexPathForFirstRow, animated: true, scrollPosition: []) 


collectionView(CollectionView, didSelectItemAt: indexPathForFirstRow) 

mais ne fonctionne pas. J'ai cherché beaucoup de questions mais la plupart d'entre elles ont la même solution et ne fonctionnent pas dans mon cas. Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

1

Si vous chargez CollectionView sur l'action de bouton, puis

CollectionView.layoutIfNeeded() 
let indexPathForFirstRow = IndexPath(row: 0, section: 0) 
CollectionView.selectItem(at: indexPathForFirstRow, animated: true, scrollPosition: []) 
collectionView(CollectionView, didSelectItemAt: indexPathForFirstRow) 

Appel en viewDidAppear:

override func viewDidAppear(_ animated: Bool) { 
    let indexPathForFirstRow = IndexPath(row: 0, section: 0) 
    CollectionView.selectItem(at: indexPathForFirstRow, animated: true, scrollPosition: []) 
    collectionView(CollectionView, didSelectItemAt: indexPathForFirstRow) 
} 
+0

Je suis le chargement CollectionView sur l'événement d'action bouton. J'ai donc ajouté ce code juste après le chargement de collectionview. Et il déclenche la méthode didSelectItem mais échoue à 'si let cell = collectionView.cellForItem (at: indexPath)' Des suggestions ?? – iUser

+0

'CollectionView.layoutIfNeeded()' a fait la magie !! Merci beaucoup. – iUser