我必须在这里遗漏一些明显的东西,但......
UIControl有一个方法
- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)
它允许您添加要在任何给定的controlEvent发生时调用的操作.ControlEvents是一个事件的位掩码,它告诉你触摸是否下降,内部,或被拖动等等,其中大约有16个,你或他们在一起,当它们中的任何一个发生时被调用.
选择器可以具有以下签名之一
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)
Run Code Online (Sandbox Code Playgroud)
这些都没有告诉你控制事件位掩码是什么.UIEvent略有不同,它与实际的触摸事件有关,而且(我认为)不包含UIControlEvent.发送方(UIControl)也无法找到控制事件.
我想有一个处理大量控制事件的方法,因为我有一些共同的代码,无论发生了哪些事件或事件,但我仍然需要知道UIControlEvents用于某些特定处理.
我错过了一种方法来找出在调用操作时使用了什么UIControlEvents,或者我是否真的必须将我的代码分成
-(void)actionWithUIControlEventX;
-(void)actionWithUIControlEventY;
Run Code Online (Sandbox Code Playgroud) 在为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)