9
votes

Action de bouton UitailViewCell personnalisée?

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 xxx

dans ma méthode celltfornordindexpath et ma méthode est la suivante: xxx

? Merci.


1 commentaires

Utilisez-vous la méthode DidSelectrow?


12 Réponses :


2
votes

Vous pouvez attribuer une étiquette de bouton IndexPath à votre méthode, comme xxx


0 commentaires

3
votes

Essayez celui-ci.

-(IBAction)myAction:(id)sender{
UIButton* btn=(UIButton*)sender;
NSLog(@"Selected row is: %d",btn.tag);
}


0 commentaires

3
votes

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


0 commentaires

8
votes
-(IBAction)myAction:(id)sender
{
UIButton *btn = (UIButton *)sender;
int indexrow = btn.tag;
NSLog(@"Selected row is: %d",indexrow);
}

0 commentaires

5
votes

Pendant que je me sens définir 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.

Au lieu de cela, j'ai un sentiment que cela pourrait fonctionner. Essayez ceci - p>

-(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);
//......
}


5 commentaires

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 , c'est parce que vous ne pouvez pas appeler cela sur uibutton. Vous devez ajouter nsset * touchs = [événement touchesforview: expéditeur] et uitouch * touch = [touche anyobject] , puis appelez emplacementInsview sur le touche variable.



3
votes

dans la coutume UitailViewCell CODE> Classe:

[cell.showRewards addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];    
cell.showRewards.tag = indexPath.row;


1 commentaires

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.



1
votes

in [Sender SuperView] Vous accédez à pas myCustomCell , mais c'est contentView . Lire UitaireViewCell Référence de la classe:

contentView Renvoie la vue de contenu de l'objet cellulaire. (lecture seule) xxx

discussion: La vue Contenu d'un UitailViewCell 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.

moyen le plus simple de modifier votre code est d'utiliser [[Sender SuperView] superview] . 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 . Une modification future similaire influencera votre code. Que la raison pour laquelle je ne suggère pas d'utiliser de cette façon.


0 commentaires

1
votes

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>

sous-classement UitablesViewCell strong> P>

Le Solution que je suis allé avec Sub ClassviewCellCell P>

MyModelObject *myModelObject = (MyModelObject *) objc_getAssociatedObject(cell, OBJECT_KEY);


0 commentaires

8
votes

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: xxx

Utilisez simplement cette catégorie sur UIView: xxx


1 commentaires

C'est en fait une belle catégorie et gère également iOS 7 et



1
votes

in - (uableviewcell *) TableView: (UitailView *) TableView CellfrowrofordexPath: (NsindexPath *) IndustryPath Ecrire le code ci-dessous: XXX

puis écrivez un Méthode comme ceci: xxx


0 commentaires

1
votes

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: xxx


0 commentaires

0
votes

Voici le "moyen le plus simple" de le faire (testé sur iOS11): xxx


0 commentaires