1

言い換えれば、2つのイベントを含む1つのボタンがあります。キャプチャする方法とUIControlEventTouchDownコールUIControlEventTouchUpInsideバック関数にありますsetRedPosか?

[btnRedPos addTarget:self action:@selector(setRedPos:) forControlEvents:UIControlEventTouchDown];// I want to pass in a value of 0
[btnRedPos addTarget:self action:@selector(setRedPos:) forControlEvents:UIControlEventTouchUpInside];// I want to pass in a value of 1

..。

- (void) setRedPos:(UIButton*)btn
{

}
4

3 に答える 3

4

ターゲット/アクションを介して任意のパラメーターを渡すことはできません。最初のパラメーターは送信者であり、2番目のパラメーター(このように設定した場合)はイベントです。次のように、イベントを使用して、どの種類のイベントがトリガーされたかを知ることができます。

[btnRedPos addTarget:self action:@selector(setRedPos:forEvent:) 
    forControlEvents:UIControlEventTouchDown];
[btnRedPos addTarget:self action:@selector(setRedPos:forEvent:) 
    forControlEvents:UIControlEventTouchUpInside];


- (void) setRedPos:(id)sender forEvent:(UIEvent*)event
{
    UITouch* aTouch = [[event allTouches] anyObject];
    if( aTouch.phase == UITouchPhaseBegan ) {
        NSLog( @"touch began" );
    }
    else if( aTouch.phase == UITouchPhaseEnded ) {
        NSLog( @"touch ended" );
    }
}
于 2012-06-21T02:04:14.223 に答える
1

2つの別々のセレクターを使用します。

- (void)setRedPosDown:(UIButton *)button {
    [self setRedPos:button state:0];
}
- (void)setRedPosUp:(UIButton *)button {
    [self setRedPos:button state:1];
}

[btnRedPos addTarget:self action:@selector(setRedPosDown:) forControlEvents:UIControlEventTouchDown];
[btnRedPos addTarget:self action:@selector(setRedPosUp:) forControlEvents:UIControlEventTouchUpInside];
于 2012-06-20T23:33:36.030 に答える
0

1つの方法でそれを達成するために私が知っている唯一の2つの方法は、1)zpasternackが説明する方法です。

最初の方法は、ボタンオブジェクトが1つしかないため、この場合に適しています。2つ目は、さまざまなボタンのアクションを実現する1つの方法を探している場合に役立ちます。

物理的な表現に近づけるようにしてください。1つのボタンですが2つの異なるアクションですか?コードにはボタンが1つだけあり、アクションをテストします。

于 2012-06-21T08:35:22.707 に答える