目标 c - 方法如何添加目标:操作:为控制事件:编程



在UIKit中,UIControl有以下方法:

  • addTarget:action:forControlEvents:
  • removeTarget:action:forControlEvents:

我很想知道这些是如何编程的。有人可以指出这些方法如何编程的资源(或提供如何编程的示例)吗?

我已经为我自己的项目实现了类似的东西,并且正在工作。但是,很高兴知道解决此问题的最佳技术,或者Apple如何实现它,因为它是一种有用的模式。(而且,如果我是对的,与代表模式不同?

这很简单。 这是您可以想象它工作的一种方法:

@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];
  }
}

当然,这不是实际的代码。 但是有代码在我面前,这是一般原则。 :)

最新更新