您可以更改您的操作以获取事件参数,如下所示:
[button addTarget:self action:@selector(callback:event:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchCancel];
-(void)callback:(UIButton *)button (UIEvent*)event {
...
}
在回调中添加第二个参数将使 Cocoa 将事件传递给您,以便您可以检查触发回调的原因。
编辑:不幸的是,可可不会向您发送 aUIControlEvent
,因此找出导致回调的控制事件并不像检查事件类型那么简单。为UIEvent
您提供了一系列触摸,您可以对其进行分析以查看它是否是UITouchPhaseCancelled
触摸。但是,这可能不是最方便的处理方式,因此设置多个回调以将正确的类型传递给您可能会更好:
[button addTarget:self action:@selector(callbackDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(callbackCancel:) forControlEvents:UIControlEventTouchCancel];
-(void)callbackDown:(UIButton*) btn {
[self callback:btn event:UIControlEventTouchDown];
}
-(void)callbackCancel:(UIButton*) btn {
[self callback:btn event:UIControlEventTouchCancel];
}
-(void)callback:(UIButton*)btn event:(UIControlEvent) event {
// Your actual callback
}