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

时间:2011-05-25 22:05:17

标签: objective-c ios events controls

我想要做的是设置一堆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];
    }
}

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

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

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

1 个答案:

答案 0 :(得分:19)

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

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