Avn*_*arr 4 objective-c uibutton uicontrol ios uicontrolevents
在为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
}
Run Code Online (Sandbox Code Playgroud)
您可以更改操作以采用事件参数,如下所示:
[button addTarget:self action:@selector(callback:event:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchCancel];
-(void)callback:(UIButton *)button (UIEvent*)event {
...
}
Run Code Online (Sandbox Code Playgroud)
向回调添加第二个参数将使Cocoa将事件传递给您,以便您可以检查触发回调的内容.
编辑:不幸的是,cocoa 不会发送给你UIControlEvent,所以弄清楚什么控件事件导致回调并不像检查事件类型那么简单.它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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |