简体   繁体   English

方法addTarget:action:forControlEvents:如何编程?

[英]How is the method addTarget:action:forControlEvents: programmed?

In UIKit, UIControl has the following methods: 在UIKit中,UIControl具有以下方法:

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

I am interested to know how these are programmed. 我很想知道这些是如何编程的。 Could someone point to a resource of how these methods are programmed (or provide an example how these are programmed)? 有人可以指出如何编程这些方法的资源(或提供一个示例如何编程)的资源吗?

I have implemented something similar for my own project that is working. 我已经为自己的项目实施了类似的工作。 However it would be great to know the best technique to go about this, or how Apple have implemented it, as it is a useful pattern. 但是,最好知道最好的技术来解决这个问题,或者知道苹果是如何实现的,因为这是一个有用的模式。 (And, if I am correct, differs from a delegate pattern?). (而且,如果我是对的,则不同于委托模式?)。

It's pretty simple. 很简单 Here's one way you could imagine it working: 这是您可以想象它起作用的一种方式:

@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end

(with an @implementation to just synthesize those properties) (通过@implementation可以综合这些属性)

Then: 然后:

- (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
}

Removal would be to simply remote the pair object from the appropriate array, and sending the events would simply be something like this: 删除将是简单地将配对对象从适当的数组中移开,然后发送事件将类似于以下内容:

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

Of course, that's not the actual code. 当然,那不是实际的代码。 But having the code here in front of me, it is the general principle. 但是将代码放在我面前,这是一般原则。 :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 目标C:如何使用addTarget:action:forControlEvents:方法? - Objective C: How to use addTarget:action:forControlEvents: method? 如何从类方法调用 addTarget:action:forControlEvents:? - How to call addTarget:action:forControlEvents: from a class method? 使用 addTarget:action:forControlEvents: 方法更改 UIImage? - Use addTarget:action:forControlEvents: method to change a UIImage? UIButton的替代选项addTarget:action:forControlEvents:IOS中的方法 - Alternative option of UIButton addTarget:action:forControlEvents: method in IOS UIButton addTarget:action:ForControlEvents无法正常工作 - UIButton addTarget:action:ForControlEvents not working 将参数传递给 addTarget:action:forControlEvents - Passing parameters to addTarget:action:forControlEvents 使用addTarget获取运行时异常:Action:forControlEvents - Getting an runtime exception using addTarget:Action:forControlEvents 对于addTarget:action:forControlEvents的addTarget指针行为感到困惑: - Confused about addTarget pointer behavior for addTarget:action:forControlEvents: Objective-C:在addTarget:action:forControlEvents中调用另一个类的方法 - Objective-C : Call a method from another class in addTarget:action:forControlEvents 如何将更多参数添加到由addTarget:action:forControlEvents:调用的选择器? - How can I add more parameters to the selector called by addTarget:action:forControlEvents:?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM