[SWIFT 3] TableView et multiselection

InsouInsou Membre

Bonjour,


 


Je me heurte à  un petit soucis qui m'a l'air très con mais je dois passer à  côté d'un truc..


 


J'ai une tableView où j'ai activer la multi selection, je peux donc sélectionner plusieurs lignes, la coche se met bien au bout de la ligne, là  aucun soucis..


 


Par contre, est-ce-qu'il y a une méthode pour connaitre toutes les lignes cochées ?


 


J'ai testé tableView.indexPathsForSelectedRows qui me paraissait pas mal mais je dois louper un truc car quand je désélectionne la ligne, cette fonction me retourne quand même la ligne désélectionnée :/


 


Du coup, soit je m'y prends mal, soit cette fonction ne fait pas ce que je crois..


 


Bref, une idée pour me débloquer ? :)


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
    print(tableView.indexPathsForSelectedRows)
    }

    override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
    {
    print(tableView.indexPathsForSelectedRows)
    }

    ça plane pour moi  :-*


  • InsouInsou Membre

    J'ai dû mal m'exprimer ^^


     


    didSelectRowAt et didDeselectRowAt se déclenche quand je clic sur une cellule..


     


    Je cherchais plutôt une fonction qui me liste toute les lignes sélectionnées ;)


     


    Pour l'instant j'ai fais un truc qui fonctionne mais j'ai l'impression que c'est de la bidouille, ça me semble fou qu'il n'y ai pas une fonction déjà  toute faite pour ça ^^


     


    En gros, dans mon didSelectRowAtIndexPath j'ai :



    if selectedCell.isSelected{
    selectedCell.isSelected = false
    if selectedCell.accessoryType == UITableViewCellAccessoryType.none{
    selectedCell.accessoryType = UITableViewCellAccessoryType.checkmark
    }
    else{
    selectedCell.accessoryType = UITableViewCellAccessoryType.none
    }
    }

    et j'ai un bouton qui lance le traitement sur toute les lignes sélectionnées comme ça :



    if let TabLignesCochées = tableDetailsZone.indexPathsForSelectedRows{
    for(Ligne) in TabLignesCochées {
    //print(Ligne)
    let LigneSelectionne:UITableViewCell = tableDetailsZone.cellForRow(at: Ligne)!
    if(LigneSelectionne.accessoryType.rawValue == 3){ // 3 = Ligne cochée
    // Traitement
    }
    }
    }


    Je voulais juste savoir si il n'y avait pas une fonction déjà  toute faite pour récupérée les lignes cochées de mon tableView ^^


  • Joanna CarterJoanna Carter Membre, Modérateur

    Tu travailles en recto-verso.


     


    Ce n'est pas le boulot d'une tableView de tenir l'état de tes données.


     


    Il vaut mieux de mettre un drapeau dans tes données pour tenir l'état de la sélection.


  • InsouInsou Membre

    Donc si je comprends bien, je ferai mieux de créer un tableau et dès que je coche/décoche une ligne, je l'ajoute/supprime du tableau ?


     


    Comme ça, la tableView ne gère pas ça et c'est réglé ?


     


    Venant du monde web, c'est normal d'y voir des fonctions associés aux objects qui retourne ce genre d'information..


    Je pensais que c'était un peu pareil en swift et ça m'étonnait qu'il n'y ai pas de fonctions déjà  toute prête qui font ça, bon bah pas grave, j'vais faire sans ^^


Connectez-vous ou Inscrivez-vous pour répondre.