如何确定哪个 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 的日期选择器不适用于第一个值更改事件