换句话说:我有一个包含两个事件的按钮,如何在回调函数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
{
}
答案 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)使用两个单独的按钮,一个用于触摸,一个用于触摸并测试发送器。
第一种方法在您的情况下更好,因为它只有一个按钮对象。 如果您正在寻找一种实现不同按钮操作的方法,那么第二种方法很有用。
尽量贴近物理表现。一键但两个不同的动作?代码只有一个按钮并测试操作。