TableView : Décaler toute les cellules en même temps

InsouInsou Membre
octobre 2019 modifié dans API UIKit #1

Bonjour tout le monde,

Je bloque sur un petit truc..

Je me sert d'une tableView pour faire une messagerie (tchat).
J'aimerai que lorsqu'on swipe une cellule vers la gauche, toute les cellules visibles swipe en même temps pour laisser apparaitre l'heure du message envoyé.

Comme sur instagram, dans les messages privés.

Exemple :

J'ai aucune idée si c'est "toute les cellules qui swippent en même temps" ou si c'est fait autrement..

Si quelqu'un à une piste, c'est pas de refus :D

Merci :)

Réponses

  • RenaudRenaud Membre
    octobre 2019 modifié #2

    Si tu n'as pas encore trouvé, voici une piste:

    • une UITableView
    • un UIPanGestureRecognizer au niveau de la UITableView, dont le delegate est ton controller. Dans la delegate function suivante gestureRecognizerShouldBegin(_:), tu vérifies que le geste parte du bon endroit (bord de la vue), et dans la bonne direction (translation X négative, translation Y 'négligeable' — ou l'inverse si les cellules sont déjà 'décalées')
    • une UITableViewCell perso, avec une variable qui représente le décalage du contenu
    • dans l'action de ton UIPanGestureRecognizer, tu énumères les cellules visibles de ta table et modifies la variable "décalage", et tu stockes cette valeur dans une variable d'instance.
    • dans la méthode de datasource tableView(_:cellAt:), tu assignes la variable d'instance 'décalage' à la cellule nouvellement configurée (pour que les cellules soient correctement alignées si l'utilisateur défile).

    Je le ferais comme ça plutôt que décaler le contenu de la table. Ça permettra plus de souplesse si tu veux des animations un peu plus sophistiquées qu'un défilement pour l'apparition de l'heure.

  • Je repassais justement ici pour voir si quelqu'un m'avait répondu ^^

    J'ai pas encore trouvé de solution mais je vais essayé de comprendre et mettre en place la tienne.

    Merci pour les pistes :)

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