代码之家  ›  专栏  ›  技术社区  ›  Nick Moore Wain

如何在IBaction调用中使用sender参数

  •  1
  • Nick Moore Wain  · 技术社区  · 15 年前

    在诸如

    - (IBAction)myAction:(id)sender {
    // do something
    }
    

    sender参数可以用于什么?

    是否可以检测在调用该操作的控件上进行了何种类型的单击(如鼠标左下键)?如果是这样怎么办?

    4 回复  |  直到 14 年前
        1
  •  5
  •   Chuck    15 年前

    这在很大程度上取决于形势。发送者是发送操作消息的对象,因此您可以在任何其他上下文中对该对象执行任何操作。这个参数没有什么特别的。

    例如,您可以 [someTextField takeIntegerValueFrom:sender] 显示滑块值的文本字段。

    如果发送者提供了某种方法来判断按下了哪个按钮,那么您可以这样做。不过,我不知道有哪门课能做到这一点。这将是一种尴尬的设计。如果不同的点击应该做不同的事情,他们最好有不同的动作方法。

        2
  •  2
  •   kent    15 年前
    switch([sender tag])
    {
     case FOO_BUTTON_TAG: 
         // do foo
      break;
    
     case BAR_BUTTON_TAG:
         // do bar
      break;
    
       &c
    }
    
        3
  •  1
  •   vaddieg    15 年前

    当很少有控件(例如表中的按钮单元格)发送相同的操作消息时,它很有用。发送者可以通过一个ID或比较来识别(发送者==OneOfMyIBoutlets)

        4
  •  1
  •   PruitIgoe    14 年前

    因为其他人可能会偶然发现这一点,所以这里有一个我正在做的例子。我有一个应用程序需要切换很多视图(用于游戏)。它们被放置在ib的后台,然后我有一个名为toggleView的方法。每个视图都有一个与之相关联的按钮来启动它的使用(在屏幕上或屏幕外滑动它)。在toggleView方法中,我检查发送者的标题[发送者标题]以查看单击了哪个按钮,然后我可以确定需要移动哪个视图。