我已经将UIControl子类化了,并希望覆盖sendAction:to:forEvent方法,以便我可以发送自己的自定义UIEvent(这样我就可以保留UIControlEvents变量)。但是,由于我必须使用的是UIEvent,因此我无法保留UIControlEvents变量。
因此,我想我需要覆盖addTarget方法,以便我可以保留UIControlEvents变量。
那么有没有人知道如何实现addTarget方法来保留它应该的功能而不重写它?此外,有人知道一个更好的解决方案,因为Apple默认情况下不会提供此信息(UIControlEvents变量通过UIEvent对象)。
答案 0 :(得分:0)
在您的子类中提供您自己的addTarget方法,但不要调用super。保存目标和选项,并使自己成为该选项的目标。当动作方法被发送到您的事件时,您可以采取任何您想要的行动。
编辑:所以你有一个子类,并希望保存添加的目标等。声明一个可变数组。当你收到这条消息:
- (void)addTarget:(id)target action:(SEL)action forControlEvents(UIControlEvents)controlEvents
在你的子类中,你可以添加这个可变字典:
[myArray addObject:[@“target”:target,@“action”:NSStringFromSelector(action),@“event”:[NSValue valueWithBytes:& controlEvents objCType:@encode(controlEvents)]];
虽然这看起来很令人生畏,但并不是那么复杂。
现在我们每个注册对象都想知道每个可能的控件事件。您的代码现在可以通过遍历数组并查找想要了解此类事件的每个对象来决定何时或是否通知一个或多个目标有关任何controlEvent。
然后,您的子类会决定任何收到通知的事件。