7

我是 iOS 开发的新手。当我以编程方式添加按钮时,我有点困惑。当我们将目标分配给按钮时,例如:

[button addTarget:self action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside];

[button addTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside];

在这两种情况下都是调用CallMe方法。谁能解释一下这两行代码之间的实际区别是什么。如果有人能addTarget特别解释一下它的工作原理会更有帮助。非常感谢。将拨出帮助。

4

3 回答 3

7

如果您添加 self 或任何其他对象作为操作消息的目标,则消息将准确发送到该对象。

添加 nil 作为目标意味着在触发消息时将在运行时搜索实际目标。查找从第一个响应者对象开始,并从那里沿着响应者链连续查找,即通过尝试 nextResponder 方法返回的对象,直到找到实现此方法的对象。查看事件处理指南以获取有关确切查找顺序的更多信息。

于 2013-06-06T06:52:53.400 回答
1

根据 Apple 的文档

目标对象是发送到 addTarget 方法的参数,即动作消息发送到的对象。如果为 nil,则在响应者链中搜索愿意响应操作消息的对象。

如果要移除动作,可以通过nil来移除所有与动作配对的目标以及remove target方法上的指定控制事件,

[button removeTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside];
于 2013-06-06T06:48:35.370 回答
1

以下是 Apple 的 UIControl 类文档中对参数 Target 的描述:

target 目标对象,即动作消息发送到的对象。如果为 nil,则在响应者链中搜索愿意响应操作消息的对象。

于 2013-06-06T06:53:45.687 回答