在UIKit中,UIControl有以下方法:
addTarget:action:forControlEvents:removeTarget:action:forControlEvents:我很想知道这些是如何编程的。有人能指出这些方法是如何编程的资源(或者提供一个例子说明这些方法是如何编程的)吗?
我已经为我自己正在工作的项目实现了类似的东西。不过,很高兴知道这方面最好的技术,或者苹果公司是如何实施的,因为它是一种有用的模式。(如果我是对的,则与委托模式不同吗?)。
发布于 2011-05-20 22:59:02
这相当简单。这里有一种你可以想象的方法:
@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];
}
}当然,这不是真正的代码。但是在我面前有代码,这是一般的原则。:)
https://stackoverflow.com/questions/6078003
复制相似问题