Je regarde autour de vous pour trouver une solution à cela, mais je ne peux pas sembler en trouver un qui fonctionne pour moi. J'ai une cellule personnalisée avec un bouton à l'intérieur. Mon problème est comment puis-je transmettre ladimentation à la méthode d'action?
En ce moment je fais maintenant p> dans ma méthode celltfornordindexpath et ma méthode est la suivante: p> ? Merci. P> p>
12 Réponses :
Vous pouvez attribuer une étiquette de bouton IndexPath à votre méthode, comme
Essayez celui-ci.
-(IBAction)myAction:(id)sender{ UIButton* btn=(UIButton*)sender; NSLog(@"Selected row is: %d",btn.tag); }
Vous définissez la valeur de la balise de bouton = IndexPath et vérifiez-la en fonction de la valeur de la balise, c'est ce que vous voulez p>
-(IBAction)myAction:(id)sender { UIButton *btn = (UIButton *)sender; int indexrow = btn.tag; NSLog(@"Selected row is: %d",indexrow); }
Pendant que je me sens définir Au lieu de cela, j'ai un sentiment que cela pourrait fonctionner. Essayez ceci - p> tag code> pour le bouton est un moyen d'aller. Vous devrez peut-être écrire du code pour vous assurer que chaque fois que la cellule est réutilisée, la balise appropriée est mise à jour sur l'objet du bouton.
-(IBAction)myAction:(id)sender
{
CGPoint location = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
UITableViewCell *swipeCell = [self.tableView cellForRowAtIndexPath:indexPath];
NSLog(@"Selected row: %d", indexPath.row);
//......
}
J'étais sur le point de suggérer nsindexpath * indexpath = [TableView indexpathfroftPoint: [[[[[[[[[[[[Evénement TouchSorview: Bouton] AnyObject] EmplacementInsview: TableView]]; Mais c'est beaucoup plus propre, merci!
Hmm, je manque quelque chose ici? Est en fait [Emplacement de l'expéditeurInsview: Self.tableview]; Travailler pour vous?
Pas pour moi. Je reçois [Uibutton EmplacementIview:]: Sélecteur non reconnu envoyé à l'instance.
Un autre [Uibutton EmplacementInsview:]: Sélecteur non reconnu
Pour ceux qui obtiennent un crash de sélecteur non reconnu avec EmplacementInview CODE>, c'est parce que vous ne pouvez pas appeler cela sur uibutton. Vous devez ajouter
nsset * touchs = [événement touchesforview: expéditeur] code> et
uitouch * touch = [touche anyobject] code>, puis appelez
emplacementInsview code> sur le
touche code> variable.
dans la coutume UitailViewCell CODE> Classe:
[cell.showRewards addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];
cell.showRewards.tag = indexPath.row;
L'ajout d'une partie cible était la partie nécessaire, vient de trouver le problème que j'essayais le sélecteur avec # comme si c'était Swift, mais merci soudainement j'ai réalisé mon erreur. Merci.
in discussion:
La vue Contenu d'un moyen le plus simple de modifier votre code est d'utiliser [Sender SuperView] code> Vous accédez à pas
myCustomCell code>, mais c'est
contentView code>.
Lire
UitaireViewCell Code> Référence de la classe:
contentView code>
Renvoie la vue de contenu de l'objet cellulaire. (lecture seule) p>
UitailViewCell code> est le superview par défaut pour le contenu affiché par la cellule. Si vous souhaitez personnaliser les cellules en ajoutant simplement des vues supplémentaires, vous devez les ajouter à la vue du contenu afin qu'ils soient positionnés de manière appropriée car la cellule passe dans et hors du mode d'édition. P>
[[Sender SuperView] superview] code>.
Mais cela cessera de fonctionner si vous modifiez plus tard votre bouton de cellule et insérez le bouton dans une autre vue.
contentView est apparu dans
iPhoneOs 2.0 code>. Une modification future similaire influencera votre code. Que la raison pour laquelle je ne suggère pas d'utiliser de cette façon. p> p>
Je trouve incroyable qu'il n'y ait pas vraiment une solution décente à cela.
Pour une raison quelconque, je trouve les méthodes de marquage et l'emplacement visuel de la cellule à l'écran pour identifier l'objet de modèle correct "décrit dans les autres réponses un peu sale. p>
Voici deux approches différentes du problème: P>
Le Solution que je suis allé avec Sub ClassviewCellCell P> MyModelObject *myModelObject = (MyModelObject *) objc_getAssociatedObject(cell, OBJECT_KEY);
Je veux juste ajouter ce que je crois, c'est la meilleure solution de tous: une catégorie sur UIView.
C'est aussi simple que ceci: p> Utilisez simplement cette catégorie sur UIView: p>
C'est en fait une belle catégorie et gère également iOS 7 et
in puis écrivez un Méthode comme ceci: p> - (uableviewcell *) TableView: (UitailView *) TableView CellfrowrofordexPath: (NsindexPath *) IndustryPath Ecrire le code ci-dessous:
Si vous voulez la index du bouton Détection de laquelle UIBUTTON a été enfoncé Dans un UitailView Décrivez comment.
Fondamentalement, l'action du bouton devient: p>
Voici le "moyen le plus simple" de le faire (testé sur iOS11):
Utilisez-vous la méthode DidSelectrow?