Все довольно просто.Вот один из способов, как вы могли бы представить, что это работает:
@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end
(с @implementation
, чтобы просто синтезировать эти свойства)
Тогда:
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)events {
if (events & UIControlEventTouchDown) {
UIControlTargetActionPair *pair = [[UIControlTargetActionPair alloc] init];
[pair setTarget:target];
[pair setAction:action];
[[self mutableArrayOfTargetActionPairsForControlEvent:UIControlEventTouchDown] addObject:pair];
[pair release];
}
else if (....) {
...
}
// repeat for all relevant control events
}
Удаление будетпросто удалить объект пары из соответствующего массива и отправить события просто так:
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents {
NSArray *pairs = [self mutableArrayOfTargetActionPairsForControlEvent:controlEvents];
for (UIControlTargetActionPair *pair in pairs) {
[[pair target] performSelector:[pair action] withObject:self withObject:theCurrentEvent];
}
}
Конечно, это не настоящий код.Но имея код здесь передо мной, это общий принцип.:)