Question

Quelqu'un peut-il me dire comment puis-je obtenir un indexPath cellulaire? Je gardais le indexPath dans le tableView: cellForRowAtIndexPath: méthode, mais cela ne charge lorsque la cellule est visualisée et je dois connaître son chemin d'index sur la méthode viewDidLoad. il en est résulté une valeur nulle, car comme je l'ai dit il charge que sa valeur après que la cellule a été vu une fois.

Merci.

EDIT

L'intention est d'être capable de sauter à une cellule spécifique qui a son numéro spécifique, mais sa non linéaire avec les sections et les lignes comptent.

Était-ce utile?

La solution

Utilisez la méthode indexPathForCell: sur le tableView, un pointeur sur un UITableViewCell il retourne son indexPath.

Vous pouvez mettre le scrollToRowAtIndexPath:atScrollPosition:animated: dans la méthode viewWillAppear si elle n'est pas configuré encore viewDidLoad. Ceci est un meilleur endroit de toute façon si la vue peut apparaître plus d'une fois après avoir été chargé, par exemple lorsqu'un contrôleur de vue modal, il invoque sa démission.

Autres conseils

A UITableViewCell n'a pas une propriété NSIndexPath. Le délégué UITableViewDataSource définit des méthodes qui demandent une cellule pour une NSIndexPath donnée, mais cela ne signifie pas que la cellule a une relation durable à une propriété NSIndexPath.

Peut-être qu'il serait utile que vous nous avez expliqué plus de ce que vous vouliez cette propriété pour? Que voulez-vous faire avec l'emplacement de la cellule viewDidLoad?

Essayez celui-ci ..

    NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj];
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition];
 NSLog(@"Selected  row:%d in section:%d",indexPath.row,indexPath.section);

Ne pas appeler comme ceci:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];

Il me semble que vous avez répondu à votre propre question: vous ne pouvez pas. Parce que la cellule ne dispose pas d'un indexPath lorsque viewDidLoad est exécuté. Et en fait, il ne dispose pas d'une suite non plus, parce que la même cellule pourrait être réutilisée pour être à un autre indice dans un dixième de seconde, si vous utilisez dequeueing cellulaire (mot gentil!), Que vous devriez.

EDIT: D'accord, je pense que je vois ce que vous voulez: vous enregistrez le indexPath vous quelque part quand vous la main la cellule à la tableView. . Remarque: si vous ne le faites pas, il n'y a aucun moyen que vous pouvez vraiment savoir à quel indexPath une cellule particulière est placée, au moins pas si vous faites les choses comme vous devriez

Alors ce que vous pouvez faire est de simplement créer toutes les cellules dans votre méthode de viewDidLoad, les stocker dans un tableau, puis, lorsque la vue de la table demande pour eux, de les remettre simplement au-dessus de ce tableau.

Notez que ce n'est pas une bonne façon de remplir une vue de la table, car il empêche les cellules d'être réutilisées. Une meilleure façon serait de sauver les contenu des cellules (UIViews uni) dans le tableau, et les ajouter comme les enfants à afficher le contenu de la cellule avant de retourner la cellule. Cela permettrait la réutilisation des cellules, ce qui est crucial pour une bonne performance. Si vous ne vous n'avez pas avez pas plus de cellules que fits sur l'écran, à vous soucier de les réutiliser cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top