【问题标题】:How to pass multiple values into @selector( ) for a UIButton?如何将多个值传递给 UIButton 的 @selector()?
【发布时间】:2012-06-20 23:28:47
【问题描述】:

也就是说:我有一个按钮有两个事件,如何在回调函数setRedPos中捕获UIControlEventTouchDownUIControlEventTouchUpInside

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

}

【问题讨论】:

标签: objective-c cocoa-touch


【解决方案1】:

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

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

【讨论】:

    【解决方案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];
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-25
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多