J'utilise la méthode tableView:indexPathForCell
pour implémenter un délégué personnalisé qui peut redimensionner de manière dynamique un UITableViewCell
basé sur la taille du cadre du UIWebView
qui est à l'intérieur de celui-ci. Le problème est que tableView:indexPathForCell
retourne nil
Lorsque j'essaie de savoir ce que l'index de la cellule particulière est la suivante:
- (void)trialSummaryTableViewCell:(TrialSummaryTableViewCell *)cell shouldAssignHeight:(CGFloat)newHeight {
NSIndexPath *indexPath = [tableV indexPathForCell:cell];
NSLog(@"tableV: %@\ncell: %@\nindexPath: %@", tableV, cell, indexPath); //<--
// ...
}
Ici, tableV
ne renvoie pas nil
, la cellule ne renvoie pas nil
, mais indexPath
renvoie nil
.
Qu'est-ce que je fais mal?
EDIT: J'appelle -(void)trialSummaryTableViewCell
de la méthode tableView:cellForRowAtIndexPath:
Il se pourrait que la cellule ne soit pas visible à ce moment. TableView: IndexpathForCell retourne nil dans cette situation. J'ai résolu ceci en utilisant IndexPathfrofortPoint Cette méthode fonctionne même si la cellule n'est pas visible. Le code:
UITableViewCell *cell = textField.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];
[Tablev IndexPathForCell: Cell] retourne nil si la cellule n'est pas visible.
De plus, si vous appelez "EssaiSummaryTableViewCell" à partir de la méthode "CellfornorTowindexPath", vous pouvez facilement passer à la méthode "EssaiSummaryTableViewCell".
Une petite mise à jour, puisque Jorge Perez 'La réponse échouera à partir de iOS7 (puisque a UIScrollView
a été insérée et appelant textField.superview.superview
ne fonctionnera plus).
Vous pouvez récupérer le NSIndexPath
comme ceci:
//find the UITableViewCell superview
UIView *cell = textField;
while (cell && ![cell isKindOfClass:[UITableViewCell class]])
cell = cell.superview;
//use the UITableViewCell superview to get the NSIndexPath
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];