2013-02-19 6 views
1

Я создаю 2 UIButton (другой тег) и подключаюсь к 1 Action, но при одновременном нажатии он запускает 2 действия с небольшой задержкой.Как реализовать два UIButton одновременно?

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

Вход всегда 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) 

Как контролировать этот случай? 2 кнопки, 1 действие - огонь 1 раз.

ответ

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 является BOOL ivar, по умолчанию YES

+0

Извините, очень хорошее решение, но я не могу понять в ближайшее время. Большое спасибо! –

5

Вы, кажется, не понимаете, что такое sender. Отправитель - это кнопка, которая запускает событие, вы будете программировать на основе того, что это такое.

Вам необходимо сохранить ссылку на кнопки, а затем сравнить их с отправителем при входе в функцию.

@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 
    } 
} 

Если вы не хотите, чтобы ссылки и использовать viewWithTag материал, я действительно не ПРЕДЛАГАЮТ, но если вы делаете, вы можете:

- (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

Никогда не используйте тег '0', поскольку это значение по умолчанию. Кроме того, подход тегов проще, если вы просто выполняете 'if (sender.tag == 1)'. Не нужно получать 'UIButton' для каждого тега. – rmaddy

+0

Спасибо! следуйте инструкциям, я проверяю [тег отправителя] и сохраняю кнопки кликов. –

+0

Благодарим вас за информацию о тегах. Я лично не использую их из-за удобства использования. Измените тег, и вам внезапно придется менять везде, где вы жестко закодировали тег :(Я не уверен, что вы подразумеваете под «Не нужно получать UIButton для каждого тега»? – ColdLogic

Смежные вопросы