UITableViewCell développer cliquez sur
Permet de dire que nous avons une coutume UITableViewCell
Donc à chaque fois que je clique sur le bouton personnalisé sur la cellule.. il devrait étendre à la partie (vous pouvez dire à une hauteur de 40 plus...) et quand je clique à nouveau sur le même bouton personnalisé il devrait s'effondrer à la hauteur précédente.
Développeur, merci de me guider.. comment puis-je réaliser cette tâche
- REMARQUE: Si vous souhaitez que la zone étendue pour contenir les nouvelles cliquable cellules (lignes) (plutôt que de simplement davantage d'espace pour les cliqué sur la cellule), voir gcamp réponse. Il commence avec un ensemble de sections qui sont fermés; cliquez sur un en-tête de section pour ouvrir cette section,en montrant ses cellules.
Vous devez vous connecter pour publier un commentaire.
Mettre en œuvre heightForRowAtIndexPath pour calculer la bonne hauteur. Puis dans le code de votre bouton, la force de la table de réévaluer chaque cellule de la hauteur avec beginUpdates plus endUpdates:
Des modifications à la tableview cellules hauteurs qui sera calculée automatiquement avec heightForRowAtIndexPath et les modifications seront animés.
En fait, au lieu d'un bouton sur votre téléphone portable qui fait cela, vous pourriez même simplement faire la sélection de la cellule ce faire, dans
didSelectRowAtIndexPath
.Je ne vais pas dire quoi que ce soit ici contredire la accepté de répondre considérant qu'il est parfaitement correct. Cependant, je vais aller plus en détail sur la façon d'accomplir ceci. Si vous ne voulez pas lire tout cela et sont plus intéressés à jouer avec le code source dans un projet de travail, j'ai téléchargé un exemple de projet à GitHub.
L'idée de base est d'avoir une condition à l'intérieur de la méthode
-tableView: heightForRowAtIndexPath:
qui détermine si oui ou non la cellule actuelle devrait être élargi. Ce sera déclenché par l'appel de début/fin des mises à jour sur la table de l'intérieur-tableView: didSelectRowAtIndexPath:
Dans cet exemple, je vais vous montrer comment faire un affichage de tableau qui permet une cellule à l'être élargie à un moment.La première chose que vous devez faire est de déclarer une référence à un NSIndexPath objet. Vous pouvez le faire quand vous le voulez, mais je vous recommande d'utiliser une déclaration de propriété comme ceci:
REMARQUE: Vous n'avez pas besoin de créer ce chemin d'index à l'intérieur de viewDidLoad, ou de toute autre méthode similaire. Le fait que l'index est initialement nulle signifie seulement que la table n'est pas d'abord avoir un plus grand ligne. Si vous préférez la table de commencer avec une ligne de votre choix élargi, vous pouvez ajouter quelque chose comme ceci à votre méthode viewDidLoad:
La prochaine étape est d'aller sur votre UITableViewDelegate méthode
-tableView: didSelectRowAtIndexPath:
pour ajouter la logique de modifier l'étendue de la cellule indice basé sur la sélection des utilisateurs. L'idée ici est de vérifier le chemin d'index qui vient d'être choisi par rapport à l'index de chemin d'accès stockée à l'intérieur de laexpandedIndexPath
variable. Si les deux sont identiques, alors nous savons que l'utilisateur essaie de désélectionner l'élargissement de la cellule dans ce cas, nous avons défini la variable à zéro. Sinon, nous avons défini laexpandedIndexPath
variable pour l'indice qui a été sélectionné. Cela est fait entre les appels à beginUpdates/endUpdates, afin de permettre l'affichage de la table afin de traiter automatiquement l'animation de transition.Ensuite, l'étape finale est dans un autre UITableViewDelegate méthode
-tableView: heightForRowAtIndexPath:
. Cette méthode sera appelée une fois que vous avez déclenchébeginUpdates
une fois pour chaque chemin d'index de la table détermine les besoins de mise à jour. C'est là que vous pourrez comparer lesexpandedIndexPath
contre le chemin d'index qui est actuellement en cours de réévaluation.Si les deux index de chemins d'accès sont les mêmes, alors c'est la cellule que vous souhaitez être élargi, sinon c'est la hauteur doit être normal. J'ai utilisé les valeurs 100 et 44, mais vous pouvez utiliser ce que jamais adapté à vos besoins.
beginUpdates
etendUpdates
? MerciJ'ai créé une bibliothèque open source pour cela. Vous venez de mettre en œuvre développer et réduire des délégués dans votre code et voilà! vous pouvez également effectuer les dessins et les animations. découvrez cette.
J'ai fait un composant réutilisable qui va faire exactement de quoi vous parlez. Il est assez facile à utiliser, et il y a un projet de démonstration.
GCRetractableSectionController sur GitHub.
Au lieu d'utiliser
[tableView beginUpdates]
et[tableView endUpdates]
, je suis en utilisant le[tableView reloadRowsAtIndexPath:... withRowAnimation:...]
méthode à l'intérieur de ladidSelectRowAtIndexPath
méthode.Je préfère cela, car j'ai eu quelques problèmes avec des éléments qui s'affiche, quand je développer mes
UITableViewCell
, quand j'ai utilisé le commencer & fin des mises à jour des méthodes. Un autre point est que vous pouvez choisir entre quelques animations comme: Haut, Bas, Gauche, Droite...C'est Mick de la réponse, mais pour Swift 4. (IndexPath remplace NSIndexPath, qui est livré avec un vide IndexPath nul crash Swift. Aussi, vous pouvez comparer deux instances de IndexPath à l'aide de
==
)Déclarer la expandedIndexPath propriété.
Facultatif viewDidLoad partie.
Puis le didSelectRow partie.
Puis le heightForRow partie.
J'ai utilisé Gcamp code source et fait ma propre version.
1) Dans une méthode loadView initialiser une mutable tableau où vous allez enregistrer élargi ou non étendu les états de vos sections. Il est essentiel pour sauver des élargi les statuts dans un tableau distinct, qui n'est pas détruit, tandis que la vue de la table des parchemins (par exemple, si vous stockez dans un headerView il sera redessiné et oublier le temps qu'il a été développé ou pas). Dans mon cas, c'est _sectionStatuses tableau.
2) Créer un personnalisé headerView pour une section, avec un bouton pour l'expansion. Déléguer une action à partir d'un bouton dans votre headerView à votre TableViewController à l'aide de délégation de modèle. Vous pouvez trouver des images dans Gcamp du code source.
3) Créer une action pour supprimer ou ajouter des lignes. Ici _foldersArray est ma structure, qui contient toutes les données. Ma section est headerView - MCExpandableAccountHeaderView sait que c'est propre numéro de section - je le transférer là quand j'ai créer en-tête de vues pour chaque section. Il est essentiel de le transférer à cette méthode, puisque vous avez à savoir la section qui est maintenant élargi ou étiré.
4) Il est également important de revenir corriger nombre de lignes dans une section en fonction du climat, il est étendu ou pas.
À ajouter à 0x7fffffff de réponse, j'ai trouvé j'avais besoin d'une condition supplémentaire dans le cas de la déclaration dans les didSelectRowAtIndexPath - donc:
La suite de cette moyen de l'article sur la façon de développer des cellules en fonction de la pression sur une touche et le réglage de la
numbersOfLine
pour une étiquette donnée, j'ai été en mesure d'effectuer l'animation à l'aideAvis
performBatchUpdates
est uniquement disponible dans iOS 11⬆️