在某些IBAction
中,我看到了:
- (IBAction)pushButton:(id)sender;
这个(id)sender
我什么时候使用它?
答案 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。例如,
这是一个参数!
答案 5 :(得分:0)
这是(id)发送者将标签信息从几个按钮传递到一个IBAction的示例。这个视频演示了(id)发送者在行动中的概念,我发现它非常有用。