如何确定哪个UIControlEvents类型导致UIEvent?

MrH*_*Hen 10 events controls objective-c ios

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

- (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];
    }
}
Run Code Online (Sandbox Code Playgroud)

尽我所知,event.type这样做不起作用.我想避免使用子类,UIControl因为对于我想要做的事情来说,这是一种严重的过度杀伤.这里剩下的活动部件并不那么重要; 我想要的是在以下设置中使用UIControlEventstarget:action:对之后检查的方法:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)

如果有一种不同的方式来设置target:action:发送回来的UIControlEvents,我会接受.但我没有在文档中看到它.或者,至少,访问对象外部,UIControl以便我可以获得我想要的类型.

Dav*_*ong 19

你是对的; UIEvent.type不这样做.在内部,UIControl子类基本上使用该sendActionsForControlEvents:方法,这意味着他们可以选择将他们想要的任何东西作为参数.

至于如何知道,简单的答案是为每个控制事件分别设置一个方法.