如何将多个值传递给UIButton的@selector()?

时间:2012-06-20 23:28:47

标签: objective-c cocoa-touch

换句话说:我有一个包含两个事件的按钮,如何在回调函数UIControlEventTouchDown中捕获UIControlEventTouchUpInsidesetRedPos

[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
{

}

3 个答案:

答案 0 :(得分:4)

您无法通过目标/操作传递任意参数。第一个参数是sender,第二个参数(如果你这样设置)就是事件。您可以使用该事件来判断触发它的事件类型,如下所示:

[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" );
    }
}

答案 1 :(得分:1)

使用两个单独的选择器。

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

答案 2 :(得分:0)

我知道在一种方法中实现这一目的的唯一两种方法是: 1)zpasternack描述的方法 2)使用两个单独的按钮,一个用于触摸,一个用于触摸并测试发送器。

第一种方法在您的情况下更好,因为它只有一个按钮对象。 如果您正在寻找一种实现不同按钮操作的方法,那么第二种方法很有用。

尽量贴近物理表现。一键但两个不同的动作?代码只有一个按钮并测试操作。