在诸如
之类的行动方法中- (IBAction)myAction:(id)sender {
// do something
}
发送者参数可以用于什么?
是否有可能检测到在调用该操作的控件上进行了哪种类型的点击(例如鼠标左键)?如果是这样的话?
答案 0 :(得分:5)
这在很大程度上取决于具体情况。发件人是发送操作邮件的对象,因此您可以对在任何其他上下文中可以执行的对象执行任何操作。参数没什么特别的。
举个例子,您可以[someTextField takeIntegerValueFrom:sender]
创建一个显示滑块条值的文本字段。
如果发件人提供某种方式来判断按下了哪个按钮,那么您可以这样做。不过,我不知道有哪些班级能做到这一点。这将是一种尴尬的设计。如果不同的点击应该做不同的事情,那么他们最好有不同的行动方法。
答案 1 :(得分:2)
switch([sender tag])
{
case FOO_BUTTON_TAG:
// do foo
break;
case BAR_BUTTON_TAG:
// do bar
break;
&c
}
答案 2 :(得分:1)
当少数控件(例如表中的按钮单元格)发送相同的操作消息时,它很有用。发件人可以通过id或比较来识别(sender == oneOfMyIBOutlets)
答案 3 :(得分:1)
由于其他人可能偶然发现这一点,所以这里是我正在做的事情的一个例子。我有一个应用程序,需要切换很多视图(游戏)。它们被放置在IB的舞台上,然后我有一个名为toggleView的方法。每个视图都有一个与之关联的按钮以启动它的使用(将其滑入或滑出屏幕)。在toggleView方法中,我检查发件人的标题[发件人标题],看看哪个按钮被点击了,然后我可以确定需要移动哪个视图。