Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c addTarget:action:forControlEvents:方法是如何编程的?_Objective C_Cocoa Touch_Uikit - Fatal编程技术网

Objective c addTarget:action:forControlEvents:方法是如何编程的?

Objective c addTarget:action:forControlEvents:方法是如何编程的?,objective-c,cocoa-touch,uikit,Objective C,Cocoa Touch,Uikit,在UIKit中,UIControl具有以下方法: addTarget:action:forControlEvents: removeTarget:action:forControlEvents: 我很想知道这些是如何编程的。是否有人可以指出这些方法是如何编程的(或提供一个如何编程的示例) 我已经为我自己正在工作的项目实现了类似的东西。然而,如果知道最好的技术,或者苹果是如何实现它的,那就太好了,因为这是一个有用的模式。(如果我没记错的话,它与委托模式不同吗?)这很简单。这里有一种方法可以让你

在UIKit中,UIControl具有以下方法:

  • addTarget:action:forControlEvents:
  • removeTarget:action:forControlEvents:
我很想知道这些是如何编程的。是否有人可以指出这些方法是如何编程的(或提供一个如何编程的示例)


我已经为我自己正在工作的项目实现了类似的东西。然而,如果知道最好的技术,或者苹果是如何实现它的,那就太好了,因为这是一个有用的模式。(如果我没记错的话,它与委托模式不同吗?)

这很简单。这里有一种方法可以让你想象它是如何工作的:

@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end
(使用
@实现
来合成这些属性)

然后:

删除只需将pair对象从适当的数组中远程发送,发送事件的方式如下:

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

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

这很简单。这里有一种方法可以让你想象它是如何工作的:

@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end
(使用
@实现
来合成这些属性)

然后:

删除只需将pair对象从适当的数组中远程发送,发送事件的方式如下:

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

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

@cs-Oops,我确实把这个问题解释错了。删除了我的答案:)@cs-Oops,我确实把问题解释错了。删除我的答案:)removeTarget:action:forControlEvents:如何实现?它是否列举了所有这些targetactionpairs,以查看它们是否符合要求,或者是否有更有效的方法?@icant这是一般原则。当然,有一些方法可以提高效率(使用查找表等)。但是,只有当您将性能度量为问题时,才需要进行性能优化。removeTarget:action:forControlEvents:是如何实现的?它是否列举了所有这些targetactionpairs,以查看它们是否符合要求,或者是否有更有效的方法?@icant这是一般原则。当然,有一些方法可以提高效率(使用查找表等)。但是,只有当您将性能衡量为一个问题时,才需要进行性能优化。