2010-01-22 4 views
2

Je dois accéder à ma cellule dans le tableau de tableView:heightForRowAtIndexPath: puisque je veux utiliser les données que j'ai pour la cellule custome pour les calculs de hauteur. La seule façon que j'ai trouvé pour obtenir mes cellules est d'appeler tableView:cellForRowAtIndexPath:Vous devez avoir accès à la cellule de la tableView: heightForRowAtIndexPath:

Le problème qui est que l'appel tableView:cellForRowAtIndexPath: est en fait de créer les cellules et que ne rien faire avec eux. Lorsque la même cellule devra être utilisée à des fins de dessin, elle sera créée à nouveau. Donc, pour le même index, la cellule est créée deux fois. Donc, je me demande s'il existe un moyen plus efficace de le faire. Merci pour l'aide.

Répondre

6

Vous n'avez pas accès à la cellule dans cette méthode car elle n'existe pas encore. tableView:heightForRowAtIndexPath: est appelée avant de créer la cellule dans tableView:cellForRowAtIndexPath:.

Mais cela ne devrait pas poser de problème car vous ne devriez pas contenir d'informations de modèle dans les objets de la cellule. Les cellules sont uniquement des vues et vous devez toujours conserver toutes les données dont vous avez besoin pour construire une cellule dans votre modèle.

+0

C'est une pensée noble, mais cela ne fonctionne pas si vous avez besoin d'utiliser layoutSubviews pour mettre en forme les cellules dans le bon format. Dans ce cas, la hauteur de la cellule peut être ajustée dynamiquement en fonction du contenu de la cellule générée. Cela pourrait encore être travaillé autour si vous connaissiez la largeur de vos cellules, mais si cela est variable aussi? Je rencontre ce problème et je n'ai pas encore trouvé de solution. N'importe qui? – JoBu1324

+4

Il n'y a pas moyen de contourner cela: avec UITableView, vous devez connaître la hauteur de la cellule avant de créer la cellule. –

+0

Je ne pense pas que ce soit vrai. J'ai remarqué que tableView: heightFOrRowAtIndexPath: est appelé avant * et * après layoutSubviews. Le problème que je rencontre est un crash la première fois que j'essaie d'obtenir la hauteur de la cellule; tableView: cellForRowAtIndexPath: provoque un plantage. J'ai essayé de placer le message dans un bloc try/catch, mais ça ne sert à rien. – JoBu1324

0

Généralement, vous choisissez la cellule à renvoyer de tableView:cellForRowAtIndexPath: en fonction de vos données et du chemin d'index.
Ainsi, vous pouvez utiliser les mêmes données et le même chemin d'index pour déterminer la hauteur de cellule à renvoyer dans tableView:heightForRowAtIndexPath:.

Questions connexes