2009-07-06 8 views
4

J'ai un objet UIImageView qui, quand on clique dessus, va lire une animation, je veux réutiliser le même code pour faire plusieurs objets. Comment définir l'étiquette de l'expéditeur afin qu'il connaisse son objet différent?uibutton sender tag

.h

- (IBAction)startClick:(id)sender; 

.m

- (IBAction)startClick:(id)sender 
{ 
    //UIImageView *theButton = (UIImageView *)sender.tag; 

    bubble.animationImages = [NSArray arrayWithObjects: 
          [UIImage imageNamed: @"Pop_1.png"], 
          [UIImage imageNamed: @"Pop_2.png"], 
          [UIImage imageNamed: @"Pop_3.png"], nil]; 

    [bubble setAnimationRepeatCount:1]; 
    bubble.animationDuration = 1; 
    [bubble startAnimating]; 
} 
+0

double possible de [casting paramètre de l'expéditeur] (http://stackoverflow.com/questions/1089752/casting-sender-parameter) – kennytm

Répondre

3

l'expéditeur est l'objet qui a appelé la méthode startClick. Vous pouvez convertir cet objet dans un UIImageView et ensuite regarder la propriété de l'étiquette de cet objet pour déterminer lequel il est.

Vous devrez définir la propriété de l'étiquette ailleurs dans le code. Si vous avez UIImageViews dans Interface Builder, vous pouvez utiliser la fenêtre de propriétés pour entrer un numéro de tag. Sinon, lorsque vous allouez et initez vos UIImageViews, définissez la propriété de l'étiquette.

+0

+1 pour fonctionne comme le charme. Merci! –

17

Utilisez [sender tag].

Pourquoi pas sender.tag, demandez-vous?

Vous ne pouvez utiliser la notation par points que si vous avez casté sender comme instance de UIView, comme dans ((UIView *)sender).tag. Les objets de UIView ont une propriété d'étiquette. Si vous ne lancez pas sender en tant qu'instance de UIView, il s'agit simplement d'un id conforme au protocole NSURLAuthenticationChallengeSender, et il lui manque une propriété tag.

Voici un exemple d'utilisation de l'étiquette d'un bouton:

#define kButtonTag 2 

- (void)viewDidLoad { 
    // ... view setup ... 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    // ... button setup ... 

    button.tag = kButtonTag; 

    [super viewDidLoad]; 
} 

- (IBAction)startClicked:(id)sender { 

    if ([sender tag] == kButtonTag) { 
     // do something 
    } 
} 
+0

Merci beaucoup! C'est beaucoup plus rapide que de lancer l'expéditeur à la classe/l'objet approprié d'abord, puis d'en récupérer la balise !!!! – tmighty

+0

juste une petite question sur le code ci-dessus: Que fait la ligne de code "#define kButtonTag 2"? – nfoggia