2009-12-30 4 views
3

J'utilise 10 boutons dans mon interface et j'ai besoin, de temps en temps, de changer le sélecteur du bouton.UIControl - modification des sélecteurs assignés: addTarget & removeTarget

Suis-je obligé d'utiliser:

-(void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

avant que je change le sélecteur ou puis-je utiliser simplement:

-(void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

Je crains que si je change le sélecteur à l'aide du addTarget: méthode sans la méthode removeTarget: je vais essentiellement "empiler" les sélecteurs pour que mon UIButton se déclenche quand il est pressé.

Répondre

12

Oui, vous devez toujours supprimer la cible précédemment ajoutée avant d'affecter la nouvelle cible au bouton. Vous aimez cette ---

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn setFrame:CGRectMake(50, 50, 200, 50)]; 

    [btn setTag:101]; 
    [btn addTarget:self action:@selector(method1) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:btn]; 


    btn = (UIButton *)[self.view viewWithTag:101]; 
    [btn removeTarget:self action:@selector(method1) forControlEvents:UIControlEventTouchUpInside]; 
    [btn addTarget:self action:@selector(method2) forControlEvents:UIControlEventTouchUpInside]; 

maintenant si vous le faites

btn = (UIButton *)[self.view viewWithTag:101]; 
     [btn addTarget:self action:@selector(method2) forControlEvents:UIControlEventTouchUpInside]; 

alors à la fois les méthodes method1 et method2 seront appelés.

Espérons que cela aide.

+2

Merci. J'ai remarqué que les docs Apple déclarent que passer NULL pour l'action: paramètre "supprime toutes les méthodes d'action associées à la cible Si le destinataire de la méthode removeTarget: est un UIButton & la cible est self (appelée dans un viewController) cela supprimerait-il toutes les méthodes Puisque je n'attribue qu'une méthode à chaque bouton, tout ce que j'ai à faire est de passer NULL dans l'action: paramètre ... Dans ce cas, n'est-ce pas analogue à référencer la méthode exacte à chaque UIButton? être retiré comme vous l'avez fait dans votre exemple ci-dessus? –

2

Oui, vous devrez supprimer l'ancienne cible/action, sinon les anciennes et les nouvelles actions seront effectuées.