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

Posted

技术标签:

【中文标题】如何确定哪个 UIControlEvents 类型导致了 UIEvent?【英文标题】:How can I determine which UIControlEvents type caused a UIEvent? 【发布时间】:2011-05-25 22:05:17 【问题描述】:

我想要做的是设置一堆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 的子类,因为这对于我想要做的事情来说是严重的矫枉过正。这里的其他活动部分并不那么重要。我想要的是在以下设置中使用 target:action: 对之后检查 UIControlEvents 的方法:

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

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

【问题讨论】:

***.com/questions/2437875/…的可能重复 @albertamg:是的,这个问题与这个问题完全一样。任何通过的选民,请继续并关闭它。 【参考方案1】:

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

至于怎么知道,简单的回答就是每个控件事件都有一个单独的方法。

【讨论】:

以上是关于如何确定哪个 UIControlEvents 类型导致了 UIEvent?的主要内容,如果未能解决你的问题,请参考以下文章

UIPanGestureRecognizer 不适用于 UIControlEvents

如何获得一个按钮来确定要转到哪个视图控制器?

带有 UIControlEvents.valueChanged 的​​日期选择器不适用于第一个值更改事件

UITableViewRowAnimation自动如何确定要使用哪个动画?

如何确定对象的类别?

swift-如何确保最初在哪个协议或类型中定义了特定属性?