如何在IBAction-call中使用sender参数

时间:2009-12-08 20:09:17

标签: objective-c cocoa

在诸如

之类的行动方法中
- (IBAction)myAction:(id)sender {
// do something
}

发送者参数可以用于什么?

是否有可能检测到在调用该操作的控件上进行了哪种类型的点击(例如鼠标左键)?如果是这样的话?

4 个答案:

答案 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方法中,我检查发件人的标题[发件人标题],看看哪个按钮被点击了,然后我可以确定需要移动哪个视图。