web-dev-qa-db-fra.com

Comment obtenir l'utableviewcell au sein de HauteurFornorTindexpath?

Comment obtient-on le UITableViewCell quand dans la méthode heightForRowAtIndexPath, c'est-à-dire compte tenu de l'index?

(Ensuite, j'aurais pu accéder aux vues de contenu que j'ai créées pour ajouter leurs hauteurs)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  // How to get the UITableViewCell associated with this indexPath?
}

merci

EDIT: En fait, y a-t-il vraiment un moyen valide de faire cela? Quand je mettais quelques NSLog déclarations, il semble que heightForRowAtIndexPath il a appelé plusieurs fois avant les appels sur cellForRowAtIndexPath (qui est là où je configurais le UILabels dans le cellule)? Ce type implique que je puisse être essayé d'utiliser une technique qui ne fonctionnera pas, c'est-à-dire que j'espérais entrer heightForRowAtIndexPath pour accéder aux étiquettes déjà créées dans chaque cellule pour obtenir leur sommet et les ajouter à la rangée globale de la cellule Taille, cependant, s'ils n'ont pas encore été mis en place (dans cellForRowAtIndexPath) alors je suppose que mon approche ne peut pas vraiment fonctionner?

27
Greg

Vous pouvez utiliser le délégué de la TableView au lieu de la TableView elle-même.

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

Vérifiez la réponse ICI

MIS À JOUR

Dans les nouvelles versions IOS et en utilisant des contraintes automatiques correctes, vous n'avez plus besoin de référencer plus la cellule pour calculer la hauteur de la cellule.

Vérifiez ici

https://www.raywenderlich.com/129059/Self-Size-Table-view-cells

24
iosMentalist

Cette question n'a aucun sens parce que dans

heightForRowAtIndexPath

aucune cellule n'est créée encore. Voici comment TableView fonctionne:

  1. TableView demande à sa source de données Combien de sections aurai. -numberOfSectionsInTableView
  2. Demande que c'est DataSource Combien de lignes chaque section auront (savoir à quel point le défileur devrait être important, etc.) -numberOfRowsInSection
  3. Demande la hauteur de la déléguée de chaque ( rangée visible . Savoir où les cellules seront situées. - heightForRowAtIndexPath
  4. Enfin, il demande à Datasource de lui donner une cellule à afficher à l'index indiquant -cellForRowAtIndexPath

Donc, vous ne pouvez pas accéder aux cellules de heightForRowAtIndexPath car avec une cellule la plus probable n'est pas encore créée.


Cependant, au cas où j'ai mal compris votre question, allez essayer:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
19
haawa

La réponse évidente consiste à appeler cellForRowAtIndexPath, mais vous avez peut-être déjà découvert qu'il y a des problèmes avec cela. Voir cette question si vous ne l'avez pas déjà fait: ditableView flexible/dynamique hauteurfornortindindexpath

Pour mon dernier projet, j'ai utilisé une sous-classe personnalisée d'UICELL et j'ai mis en œuvre une méthode comme celle-ci. J'ai ensuite appelé cela de table:heightForRowAtIndexPath: (Après avoir levé le contenu de cette ligne).

+ (CGFloat) heightOfContent: (NSString *)content
{
    CGFloat contentHeight = 
           [content sizeWithFont: DefaultContentLabelFont
               constrainedToSize: CGSizeMake( DefaultCellSize.width, DefaultContentLabelHeight * DefaultContentLabelNumberOfLines )
                   lineBreakMode: UILineBreakModeWordWrap].height;
    return contentHeight + DefaultCellPaddingHeight;
}
14
skue

je vous suggère de calculer la bonne hauteur d'une ligne dans table:heightForRowAtIndexPath: En utilisant votre structure de données (hauteur du texte, images, texte mutliline, etc.).

Et modifiez la hauteur du composant dans leur méthode -(void) layoutSubviews.

4
Jhaliya

Si vous souhaitez accéder aux cellules, utilisez des balises. Mais comme @jhaliya a dit qu'il est préférable de calculer la hauteur basée sur le contenu de la cellule. Si votre considération est avec la position de la cellule, je vous suggère d'utiliser une vue de défilement et de mettre en œuvre les cellules vous-même où que vous soyez.

1
Prajwal Udupa