2013-02-19 61 views
1

我創建了2個UIButton(不同的標籤)並連接到1個動作,但是當同時按下時,它會以小的延遲觸發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); 
} 

一直記錄2倍:

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) 

如何控制這種情況? 2Buttons,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; 
} 

_canClickBOOL ivar,默認爲YES

+0

對不起,很好的解決方案,但我很快就無法理解。很感謝! – 2013-02-21 14:55:14

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 2013-02-19 03:03:25

+0

謝謝!按照你的指導,我檢查[發件人標籤]並存儲點擊按鈕。 – 2013-02-19 03:15:27

+0

感謝您提供有關標籤的信息。我個人不會因爲可用性而使用它們。改變標籤,你突然不得不改變你硬編碼標籤的地方:(。我不確定你的意思是「不需要爲每個標籤獲得UIButton」? – ColdLogic 2013-02-19 03:15:43