重写addTarget方法



我已经将UIControl子类化,并希望覆盖sendAction:to:forEvent方法,以便我可以发送自己的自定义UIEvent(以便我可以保留UIControlEvents变量)。但是,由于我所要处理的只是一个UIEvent,所以我无法保留UIControlEvents变量。

因此,我认为我需要重写addTarget方法,以便保留UIControlEvents变量。


主要问题:

那么,有人知道如何实现addTarget方法以在不重写它的情况下保留它应该有的功能吗?此外,有人知道更好的解决方案吗?因为苹果默认情况下不会提供此信息(通过UIEvent对象的UIControlEvents变量)。

在子类中提供自己的addTarget方法,但不要调用super。保存目标和选项,并使自己成为该选项的目标。当该事件的操作方法被发送到您的时,您可以采取您想要的任何操作。

EDIT:所以你有一个子类,并且想要保存添加的目标等等。声明一个可变数组。当您收到以下消息时:

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

在您的子类中,您添加了这样一个可变字典:

[myArray addObject:[@"target":target,@"action":NSStringFromSelector(action),@"event":[NSValueWithBytes:&controlEvents objCType:@encode(controlEvents)]];

虽然乍一看这似乎令人生畏,但它并没有那么复杂。

现在我们有了每一个注册的对象,它们想知道每一个可能的控制事件。您的代码现在可以决定何时或是否通知一个或多个目标任何controlEvent,方法是在数组中进行交互,并找到每个想要了解此类事件的对象。

然后,您的子类决定任何事件,谁会得到关于什么的通知。

最新更新