2013-02-19 6 views
1

Je crée 2 UIButton (autre tag) et se connecter à 1 action mais quand la presse en même temps, il se déclenche 2 l'action avec un petit retard.Comment implémenter deux UIButton en même temps?

- (IBAction)keysPress:(UIButton *)sender { 
    UIButton *butOne = (UIButton *)[sender viewWithTag:0]; 
    UIButton *butTwo = (UIButton *)[sender viewWithTag:1]; 
    NSLog(@"BUT 1: %@ || BUT 2: %@",butOne, butTwo); 
} 

Déconnectez-vous toujours 2times:

2013-02-19 09:37:40.933 TestActions[1107:c07] BUT 1: <UIButtonLabel: 0xca4d450; frame = (65 67; 9 19); text = 'â'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xca4d4c0>> || BUT 2: <UIRoundedRectButton: 0xca4d310; frame = (161 164; 139 153); opaque = NO; autoresize = RM+BM; tag = 1; layer = <CALayer: 0xca4d270>> 

2013-02-19 09:37:40.935 TestActions[1107:c07] BUT 1: <UIRoundedRectButton: 0xca4c5c0; frame = (20 164; 135 153); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0xca4c6b0>> || BUT 2: (null) 

Comment contrôler ce cas? 2 Boutons, 1 action - tir 1 fois.

Répondre

2
- (IBAction)keysPress:(UIButton *)sender { 
    if(_canClick) 
    { 
     _canClick = NO; 
     UIButton *butOne = (UIButton *)[sender viewWithTag:0]; 
     UIButton *butTwo = (UIButton *)[sender viewWithTag:1]; 
     NSLog(@"BUT 1: %@ || BUT 2: %@",butOne, butTwo); 
     [self performSelector:@selector(makeButtonCanClick) withObject:nil afterDelay:YOURTIMEINTERVAL]; 
    } 

} 

- (void)makeButtonCanClick 
{ 
    _canClick = YES; 
} 

_canClick est un BOOL Ivar, par défaut est YES

+0

Désolé, Très bonne solution mais je ne comprends pas bientôt. Milles mercis! –

5

Vous ne semblez pas comprendre ce que le sender est. L'expéditeur est le bouton qui a déclenché l'événement, vous le programmez en fonction de ce que c'est.

Vous devez enregistrer une référence aux boutons et de les comparer à l'expéditeur sur l'entrée à la fonction.

@property (nonatomic, weak) IBOutlet UIButton *butOne; 
@property (nonatomic, weak) IBOutlet UIButton *butTwo; 

-(IBAction)keysPress:(UIButton *)sender { 
    if(sender == [self butOne]) { 
     //Do button one actions 
    } 

    if(sender == [self butTwo]) { 
     //Do button two actions 
    } 
} 

Si vous ne souhaitez pas conserver les références et utiliser les trucs viewWithTag, je ne sais vraiment pas le suggérez, mais si vous le faites, vous pouvez:

- (IBAction)keysPress:(UIButton *)sender { 
    UIButton *butOne = (UIButton *)[self viewWithTag:1]; 
    UIButton *butTwo = (UIButton *)[self viewWithTag:2]; 
    if(sender == butOne) { 
     //Do button one actions 
    } 

    if(sender == butTwo) { 
     //Do button two actions 
    } 
} 
+0

Ne jamais utiliser une balise de '0' puisque c'est la valeur par défaut. En outre, l'approche par étiquette est plus facile si vous faites simplement 'if (sender.tag == 1)'. Pas besoin d'obtenir 'UIButton' pour chaque tag. – rmaddy

+0

Merci! suivez votre guide, je vérifie [étiquette de l'expéditeur] et stocker les boutons de clic. –

+0

Merci pour l'info concernant les tags. Personnellement, je ne les utilise pas en raison de la convivialité. Changer l'étiquette et vous avez soudainement changer partout où vous codait le tag :(. Je ne sais pas ce que vous entendez par « Pas besoin d'obtenir UIButton pour chaque tag »? – ColdLogic

Questions connexes