首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法addTarget:action:forControlEvents: programmed?

方法addTarget:action:forControlEvents: programmed?
EN

Stack Overflow用户
提问于 2011-05-20 22:02:51
回答 1查看 1.5K关注 0票数 1

在UIKit中,UIControl有以下方法:

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

我很想知道这些是如何编程的。有人能指出这些方法是如何编程的资源(或者提供一个例子说明这些方法是如何编程的)吗?

我已经为我自己正在工作的项目实现了类似的东西。不过,很高兴知道这方面最好的技术,或者苹果公司是如何实施的,因为它是一种有用的模式。(如果我是对的,则与委托模式不同吗?)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-20 22:59:02

这相当简单。这里有一种你可以想象的方法:

代码语言:javascript
复制
@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end

(使用@implementation来合成这些属性)

然后:

代码语言:javascript
复制
- (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
}

移除只需将对对象从适当的数组中远程移除,而发送事件则类似于以下内容:

代码语言:javascript
复制
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents {
  NSArray *pairs = [self mutableArrayOfTargetActionPairsForControlEvent:controlEvents];
  for (UIControlTargetActionPair *pair in pairs) {
    [[pair target] performSelector:[pair action] withObject:self withObject:theCurrentEvent];
  }
}

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6078003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档