我如何确定哪个UIControlEventstypes导致了一个UIEvent?

我想要做的是设置一堆UIControl对象,通过相同的处理程序发送所有事件。 该处理程序需要根据触发的UIControlEventstypes确定适当的操作。

 - (void)handleEventFromControl:(id)sender withEvent:(UIEvent *)event { UIControl *control = sender; NSIndexPath *indexPath = [controlIndexPaths objectForKey:control]; UIControlEvents controlEventType = event.type; //PROBLEM HERE BOOL fire = NO; NSNumber *eventCheck = [registeredEventsByToolkitIndex objectAtIndex:indexPath.toolkit]; fire = ([eventCheck integerValue] & controlEventType); if(!fire) { eventCheck = [registeredEventsByControlIndex objectAtIndex:indexPath.control]; fire = ([eventCheck integerValue] & controlEventType); } if(!fire) { eventCheck = [registeredEventsByIndexPath objectForKey:indexPath]; fire = ([eventCheck integerValue] & controlEventType); } if(fire) { [self.delegate toolkit:self indexPath:indexPath firedEvent:event]; } } 

尽我所知, event.type不能这样工作。 我想避免有一个UIControl的子类,因为这是我想要做的严重矫枉过正。 其余的运动部件并不那么重要, 我想要的是在以下设置中使用target:action: pair之后检查UIControlEvents的方法:

 - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

如果有一个不同的方式来设置一个target:action:发回UIControlEvents ,我会采取的。 但是我没有在文档中看到它。 或者,至less可以在UIControl对象之外访问,以便获得我想要的types。

你是对的 UIEvent.type不能这样工作。 在内部, UIControl子类基本上使用sendActionsForControlEvents:方法,这意味着他们可以select把他们想要的任何东西作为参数。

至于如何知道,简单的答案是每个控制事件都有一个单独的方法。