Comment obtenir UITableViewCell indexPath de la Cellule?
Comment, à partir d'une cellule, son indexPath
dans un UITableView
?
J'ai cherché autour de débordement de pile et google, mais tous les renseignements sont sur l'autre manière autour. Est-il un moyen d'accéder à la superView
/UITableView
et ensuite, la recherche de la cellule?
Plus d'informations sur le contexte: il y a deux classes que j'ai, un seul est appelé Cue
et est appelé CueTableCell
(qui est une sous-classe de UITableViewCell
) CueTableCell
est la représentation visuelle de Cue
(les deux classes ont des pointeurs vers les uns des autres). Cue
les objets sont dans une liste, et lorsque l'utilisateur effectue une certaine commande, la représentation visuelle (le CueTableCell
) de la prochaine Cue
doit être sélectionné. Ainsi, le Cue
appels de classe de la select
méthode sur la prochaine Cue
dans la liste, qui récupère le UITableView
de la cell
et appelle sa selectRowAtIndexPath:animated:scrollPosition:
, pour lequel il a besoin de la indexPath
de la UITableViewCell
.
- Tout comme vos autres question sur l'obtention de la
UITableView
à partir d'une cellule - pourquoi? Cela semble comme une odeur de code d'une mauvaise conception de décision, il n'y a pas beaucoup de légitime cas d'utilisation d'une cellule à savoir, soit c'est indexPath ou si elle est à l'écran ou non. - Je suis d'accord avec Paul.s de commentaire. Vous devez indiquer pourquoi vous voulez le faire, parce que ce que vous essayez de faire est probablement une mauvaise idée.
- J'ai posté le design de mon programme en question. Il est peut-être la mauvaise programmation de la pratique, dans ce cas si vous pouviez proposer une alternative, qui serait très utile. Je suis très nouveau pour le cacao et le relativement nouveau à la programmation en général.
Vous devez vous connecter pour publier un commentaire.
Il permet la lecture de la UITableView documentation, même si ce n'est par quelques considérée comme controversée (voir les commentaires ci-dessous).
La cellule n'a pas à savoir ce que son chemin d'index est. Le contrôleur doit contenir n'importe quel code qui manipule les éléments de l'INTERFACE utilisateur basée sur le modèle de données ou qui modifie les données de base sur l'INTERFACE utilisateur interactions. (Voir MVC.)
Essayer avec ce à partir de votre UITableViewCell:
EDIT: Semble que cela ne fonctionne pas sur iOS 8.1.2 et plus. Merci à Chris Prince pour le signaler.
Vous pouvez essayer cette astuce simple:
sur votre
UITableViewCell
Classe :et sur votre
cellForRowAtIndexPath
méthode :maintenant, vous pouvez récupérer votre cellule indice de n'importe où
Mettre une faiblesse de la tableView propriété dans la cellule .h fichier comme:
@property (weak,nonatomic)UITableView *tableView;
Attribuer la propriété dans cellForRowAtIndex méthode comme:
cell.tableView = tableView;
Maintenant où vous avez besoin de la indexPath de la cellule:
NSIndexPath *indexPath = [cell.tableView indexPathForCell:cell];
À l'adresse de ceux qui disent "c'est une mauvaise idée", dans mon cas, mon besoin c'est que j'ai un bouton sur mon
UITableViewCell
qui, une fois pressé, est un segue un autre point de vue. Puisque ce n'est pas une sélection sur la cellule elle-même,[self.tableView indexPathForSelectedRow]
ne fonctionne pas.Cela me laisse deux options:
NSFetchedResultsController
parce que je ne pas souhaitez stocker tous les objets en mémoire, surtout si la table est longue.NSIndexPath
par un hack, mais au final c'est moins cher que le stockage d'objets en mémoire.indexPathForCell:
est la bonne méthode à utiliser, mais voici comment je ferais (ce code est supposé être mis en œuvre dans une sous-classe deUITableViewCell
:P. S. Mon vrai code n'a accès à tout, à partir de la vue de la table, mais je suis en train de donner un exemple de pourquoi quelqu'un pourrait vouloir faire quelque chose comme cela dans la cellule du tableau directement.
Pour swift
La réponse à cette question m'a beaucoup aidé.
J'ai utilisé
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
La
sender
dans mon cas était unUITableViewCell
et vient de laprepareForSegue
méthode.J'ai utilisé ce parce que je n'ai pas ont un
TableViewController
mais j'ai euUITableView property outlet
J'avais besoin pour trouver le titre de la
Cell
et donc besoin de connaître les indexPath d'elle.Espère que cela aide quelqu'un!
Sur iOS 11.0, vous pouvez utiliser
UITableView.indexPathForRow(at point: CGPoint) -> IndexPath?
:Il devient le point central de la cellule, puis la tableView renvoie la indexPath correspondant à ce point.
essayez ceci (il ne fonctionne que si la tableView a qu'un seul article et toutes les cellules ont la même hauteur) :
Essayer avec ce à partir de votre UITableViewCell:
Pour fournir l'accès à ma cellule, j'ai fait quelque chose comme ceci:
J'ai une extension de la UIView:
Et puis.. dans ma Classe de cellules:
C'est tout formulaire de moi.
Meilleures salutations.