在UIKit中,UIControl具有以下方法:
addTarget:action:forControlEvents:
removeTarget:action:forControlEvents:
我很想知道这些是如何编程的。有人可以指出如何编程这些方法的资源(或提供一个如何编程这些方法的例子)?
我已经为我自己的项目实现了类似的工作。然而,知道最好的技术,或Apple如何实现它将是很好的,因为它是一个有用的模式。 (并且,如果我是正确的,与委托模式不同?)。
答案 0 :(得分:6)
这很简单。这是你可以想象它的一种工作方式:
@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
}
删除将只是从适当的数组中远程调用pair对象,发送事件就是这样的:
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents {
NSArray *pairs = [self mutableArrayOfTargetActionPairsForControlEvent:controlEvents];
for (UIControlTargetActionPair *pair in pairs) {
[[pair target] performSelector:[pair action] withObject:self withObject:theCurrentEvent];
}
}
当然,这不是实际的代码。但是把代码放在我面前,这是一般原则。 :)