在为 UIButton 定义回调时,我列出了同一操作的多个事件
在目标中我希望能够区分触发回调的事件
[button addTarget:self action:@selector(callback:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchCancel];
-(void)callback:(UIButton *)button
{
// need to be able to distinguish between the events
if (event == canceled)
{
}
if (event == touchDown)
{
}
... etc
}
您可以更改操作以获取事件参数,如下所示:
[button addTarget:self action:@selector(callback:event:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchCancel];
-(void)callback:(UIButton *)button (UIEvent*)event {
...
}
在回调中添加第二个参数将使 Cocoa 将事件传递给您,以便您可以检查触发回调的内容。
EDIT :不幸的是,可可不会向您发送UIControlEvent https://stackoverflow.com/a/6131718/335858,因此弄清楚是什么控制事件导致了回调并不像检查事件类型那么简单。这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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)