目标C:什么是“(id)发件人”?

时间:2011-04-07 08:30:14

标签: objective-c ibaction sender

在某些IBAction中,我看到了:

- (IBAction)pushButton:(id)sender;

这个(id)sender我什么时候使用它?

6 个答案:

答案 0 :(得分:62)

Matt Galloway在iPhone Dev SDK论坛上的行动中描述了(id) sender的含义:

  

(id)sender是将消息发送到该选择器的对象。就像在委托函数中,你将控件传递给函数等等。

     

如果您有两个调用该选择器的对象,并且您想要区分它们,则可以使用它。当然,您可以使用两种不同的功能,但使用一个功能通常更清晰,代码重复更少。

UIControl Class Reference了解更多详情。


一个例子,UITextField有一个委托,当UITextField编辑结束时触发:

-(IBAction) editingEnded:(id) sender {
   // the cast goes here, lets assume there's more than one UITextfield 
   // in this Owner and you want to know which one of them has triggered
   // the "editingEnded" delegate
   UITextField *textField= (UITextField*)sender;
   if(textfield == iAmTheLastTextField)
   {
     // for example login now.
     [self login];
   }
}

答案 1 :(得分:35)

(id)sender is the object which sent the message to that selector.

代码示例:

- (IBAction)submitButton:(id)sender {
    UIButton *button = (UIButton *)sender;
    [button setEnabled:NO];
    [button setTitle:@"foo" forState:UIControlStateDisabled];
}

答案 2 :(得分:5)

“sender”是变量的名称。

“(id)”表示变量的类型为“id”,表示“任何对象”(如果需要,可以将其视为对象层次结构的顶部

该方法的名称为 pushButton:,需要任意类型的1个参数。

此方法将链接到UI上的按钮。此UI的代理将接收此调用,并将引用已进行调用的UIButton。有时您不需要它,有时您需要访问该UIButton才能更改其属性。

答案 3 :(得分:1)

它是Cocoa target-action mechanism的一部分,它是对象可以相互通信的一种方式。响应事件(例如鼠标单击),一个对象(通常是某种控件)将消息发送到另一个对象。发送者被称为“发送者”,接收者是“目标”,消息是“行动”。

您可以在目标的消息处理程序中使用它,以获取有关发件人的操作的其他信息。

答案 4 :(得分:0)

我从Rabskatran那里学到了很多东西。但我想纠正说“发送者”是变量名称的唯一部分。它应该是(来自Apple文档 - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):

“操作消息调用的方法具有特定的签名:一个参数,包含对发起操作消息的对象的引用;按照惯例,此参数的名称是sender。例如,

  • (无效)moveToEndOfLine:(ID)发送者; //来自NSResponder.h“

这是一个参数!

答案 5 :(得分:0)

这是(id)发送者将标签信息从几个按钮传递到一个IBAction的示例。这个视频演示了(id)发送者在行动中的概念,我发现它非常有用。

iPhone Programming - (id)sender explained