web-dev-qa-db-fra.com

TableView: IndexpathForCell retourne nil

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:

38
tacos_tacos_tacos

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];
126
Jorge Perez

[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".

13
Nandakumar R

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];
4
Daniel