0
votes

Comment maintenir l'état de la cellule de vue de la collection après avoir rejûté de la vue?

J'ai donc une collectionView qui contient une gamme de Tendances Les utilisateurs peuvent cliquer sur cette photo. Lorsque la cellule cliquette est cliquée, une coche apparaît que l'utilisateur sache qu'ils ont sélectionné cette catégorie et leur photoïde est ensuite entré dans les enfants sélectionnés dans la base de données.

Les utilisateurs ont la possibilité de modifier leur photo si elles ont décidé qu'ils veulent supprimer leur photo d'une certaine catégorie. Lorsque je sélectionne Modifier le profil, les cellules qui doivent être sélectionnées (celles que je choisis lors du téléchargement de la photo) sont non sélectionnées. P>

ou dit par exemple, j'ai déjà une photo téléchargée mais je veux maintenant le présenter, quand je vais à éditer une photo et appuyez sur une catégorie la coche semble me dire que cette catégorie est choisie. Lorsque je appuyais sur Enregistrer la photo est ajouté à l'enfant choisi dans la base de données comme prévu, mais lorsque je clique sur Modifier le profil à nouveau et que la vue est présentée. Les cellules que j'ai choisies il y a 10 secondes sont maintenant non sélectionnées. p>

Comment puis-je maintenir un état sélectionné ou désélectionné même après avoir rejeté le contrôleur d'affichage? P>

class TrendsCollectionCell: UICollectionViewCell {


    override var isSelected: Bool{
        didSet{
            if isSelected {

              setSelectedUI()

            }
            else{

                setUnSelectedUI()

            }

        }
    }

    func setSelectedUI(){

    trendCheckmark.isHidden = false
    trendCheckmark.tintColor = .white

    }

    func setUnSelectedUI(){
        // reset to deafault, hide checkmark
        trendCheckmark.isHidden = true

    }

}


1 commentaires

Montrez votre cellule pour l'article à IndexPath


3 Réponses :


0
votes

Vous pouvez stocker l'index sélectionné dans le cadre d'un État, puis stocker / utiliser cet état comme vous le souhaitez. Vous le feriez en ayant une propriété sélectionnée ou, si vous avez plus de propriétés, vous pouvez avoir une autre structure Viewstate que vous mettez à jour dans dactSelectitemat . Vous avez ensuite un gestionnaire d'état en dehors de vos contrôleurs d'affichage (recommandé) ou vous transmettez l'état entre les contrôleurs d'affichage (si vous avez une application simple).


1 commentaires

Bien que chaque réponse soit à peu près la même chose que vous avez répondu en premier. Merci beaucoup, cela a fini de travailler.



0
votes

Trois étapes nécessaires pour maintenir l'état de cellule sélectionné. Ceci applicable pour View de table et Vue de la collection

1. Maintenez la dernière index sélectionné pour la cellule sélectionnée.

2. mise à jour cellindex sur chaque appel a sélectionné appel.

3. pour chaque Cellfroworindex Vérification de la méthode si ce sélectionné cellule ou non.

Une explication supplémentaire est sur ma réponse précédente https://stackoverflow.com/questions/59293617/ multiples-cellules-sélectionné-activé-rouler-cellules-problèmes-problème /


0 commentaires

0
votes

Je ne recommande jamais d'utiliser une variable de cellule sélectionnée pour détecter la sélection des cellules car cette variable ne décrit pas complètement l'état, en raison du mécanisme de déséquilibre et de recyclage qui fonctionne pour Uicollectionview et uableview, donc je recommande à chaque fois que tout l'état de vos modèles , Donc, vous avez 2 options

  1. Ajoutez une propriété issuelle à chaque modèle de cellule li>
  2. Ajoutez une propriété simple à votre contrôleur d'affichage qui réservent l'index sélectionné li> ol>

    Importation de fondation P>

    @IBOutlet weak var numberLable: UILabel!
    @IBOutlet weak var backGroundview: AnimatableView!
    static let identiefier: String = "NumberCollectionViewCell"
    static let nibName: String =  "NumberCollectionViewCell"
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    override var isSelected: Bool {
        didSet {
    
            setupSelection(iseSelected: isSelected)
    }
    }
    
    private func setupSelection(iseSelected: Bool) {
        backGroundview.backgroundColor = isSelected ?  UIColor("#4d8ec5") : UIColor("#ffffff")
        backGroundview.borderColor = isSelected ?  UIColor.clear : UIColor("#707070")
        numberLable.textColor = isSelected ?  UIColor("#ffffff") : UIColor("#444e53")
    }
    func configure(number: Int,isSelected: Bool) {
        numberLable.text = "\(number)"
        setupSelection(iseSelected: isSelected)
    }
    


4 commentaires

Cela vous dérange-t-il de me donner un exemple sur la façon de réserver l'index sélectionné? C'est là où je suis coincé à


Dans l'exemple, je veux juste afficher la collection de cartes numériques


Désolé, il suffit d'avoir du mal à enrouler ma tête autour de cela. Je vais donc enregistrer un tableau des chaînes sélectionnées et le numéro de l'indice également? Jamais travaillé avec Sauvegarde de l'état avec DisSélectionnez Donc, je m'excuse si mes questions sont des connaissances courantes.


Je peux déjà afficher la collection de catégories que je souhaite, lorsque je sélectionne / désélectionne la cellule, la coche se cache et affiche comme prévu. Lorsque je télécharge la photo, la photo est également affichée dans la catégorie correcte que j'ai sélectionnée. Cependant, lorsque je vais à éditer cette photo pour supprimer la photo de la catégorie I sélectionnée, la coche .Ciddridique = true quand il doit enregistrer et conserver la coche.