1

2つのUIButton(異なるタグ)を作成して1つのアクションに接続しますが、同時に押すと、わずかな遅延で2つのアクションが発生します。

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

このケースを制御する方法は?2ボタン、1アクション-1回発射します。

4

2 に答える 2

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
   }
}
于 2013-02-19T02:48:16.523 に答える
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;
}

_canClickBOOLivarで、デフォルトはYES

于 2013-02-19T02:54:56.570 に答える