129 votes

Passage de paramètres à addTarget:action:forControlEvents

Je suis à l'aide de addTarget:action:forControlEvents comme ceci:

[newsButton addTarget:self
action:@selector(switchToNewsDetails)
forControlEvents:UIControlEventTouchUpInside];

et je voudrais passer des paramètres à mon sélecteur "switchToNewsDetails". La seule chose que je réussis à faire est de passer le (id)sender par écrit:

action:@selector(switchToNewsDetails:)

Mais je suis en train de passer des variables comme des valeurs entières. L'écriture de cette façon ne fonctionne pas :

int i = 0;
[newsButton addTarget:self
action:@selector(switchToNewsDetails:i)
forControlEvents:UIControlEventTouchUpInside];

L'écriture de cette façon ne fonctionne pas non plus:

int i = 0;
[newsButton addTarget:self
action:@selector(switchToNewsDetails:i:)
forControlEvents:UIControlEventTouchUpInside];

Toute aide serait appréciée :)

175voto

Vladimir Points 110327
action:@selector(switchToNewsDetails:)

Vous n'avez pas à passer des paramètres à l' switchToNewsDetails: méthode ici. Il vous suffit de créer un sélecteur pour faire des boutons en mesure de les appeler quand certaines action se produit (touch dans votre cas). Les contrôles peuvent utiliser 3 types de sélecteurs pour répondre aux actions, tous ont un sens prédéterminé de leurs paramètres:

  1. sans paramètres

    action:@selector(switchToNewsDetails)
    
  2. avec 1 paramètre indiquant la commande qui envoie le message

    action:@selector(switchToNewsDetails:)
    
  3. Avec 2 paramètres indiquant la commande qui envoie le message et l'événement qui a déclenché le message:

    action:@selector(switchToNewsDetails:event:)
    

Il n'est pas clair exactement ce que vous essayez de faire, mais vu que vous voulez attribuer des détails de l'index de chaque bouton, vous pouvez effectuer les opérations suivantes:

  1. définir une propriété tag de chaque bouton égale à index requis
  2. en switchToNewsDetails: méthode, vous pouvez obtenir cet indice et ouvrir approprié deatails:

    - (void)switchToNewsDetails:(UIButton*)sender{
        [self openDetails:sender.tag];
        // Or place opening logic right here
    }
    

64voto

Yuriy Polezhayev Points 341

Pour passer des paramètres personnalisés avec le bouton cliquez sur vous avez juste besoin de la sous-classe UIButton.

(ASR est sur, donc il n'y a pas de rejets dans le code.)

C'est myButton.h

#import <UIKit/UIKit.h>

@interface myButton : UIButton {
    id userData;
}

@property (nonatomic, readwrite, retain) id userData;

@end

C'est myButton.m

#import "myButton.h"
@implementation myButton
@synthesize userData;
@end

Utilisation:

myButton *bt = [myButton buttonWithType:UIButtonTypeCustom];
[bt setFrame:CGRectMake(0,0, 100, 100)];
[bt setExclusiveTouch:NO];
[bt setUserData:**(insert user data here)**];

[bt addTarget:self action:@selector(touchUpHandler:) forControlEvents:UIControlEventTouchUpInside];

[view addSubview:bt];

Réception de la fonction:

- (void) touchUpHandler:(myButton *)sender {
    id userData = sender.userData;
}

Si vous avez besoin de moi pour être plus précis sur n'importe quelle partie du code ci-dessus - n'hésitez pas à demander à ce sujet dans les commentaires.

19voto

Benoît Points 5598

Cible-Action permet trois formes différentes de sélecteur :

8voto

carelesslyChoosy Points 165

J’ai fait une solution basée en partie par les informations ci-dessus. Je viens de régler le titlelabel.text à la chaîne, je veux passer et définir la titlelabel.hidden = YES

Comme ça :

De cette façon, il n’y a pas besoin d’un héritage ou la catégorie et il n’y a pas de fuite de mémoire

5voto

rjdunwoody91 Points 33

Je créais plusieurs boutons pour chaque numéro de téléphone dans un tableau pour chaque bouton avait besoin d’un autre numéro de téléphone à appeler. J’ai utilisé la fonction de setTag que je créais plusieurs boutons dans une boucle for :

Ensuite, dans mon appel : méthode j’ai utilisé la même boucle et un if déclaration de choisir le numéro de téléphone correct :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X