如何传递多个值到@selector()UIButton? [英] How to pass multiple values into @selector( ) for a UIButton?

查看:134
本文介绍了如何传递多个值到@selector()UIButton?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In other words: I have one button with two events, how to capture UIControlEventTouchDown and UIControlEventTouchUpInside in the callback function 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
{

}


推荐答案

不能通过target / action传递任意参数。第一个参数是sender,第二个(如果你这样设置)是事件。你可以使用事件来告诉它是什么类型的事件触发它,像这样:

You can't pass arbitrary parameters via target/action. The first parameter is sender, and the second (if you set it up this way) is the event. You could use the event to tell what kind of event triggered it, like so:

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

这篇关于如何传递多个值到@selector()UIButton?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆