但我想为函数 myAction 提供一个参数...
如何?
你不能。
...如果有多个按钮使用此方法,我们无法区分发件人(仅与标题)...
有三种方法可以判断哪个按钮(或其他控件)正在与您通话:
- 为每个按钮(或其他控件)分配一个标签,并在您的操作方法中比较这些标签。当您在 nib 中创建控件时,缺点是您必须编写两次标记(一次在代码中,一次在 nib 中)。由于您是从头开始手动编写按钮,因此您没有这个问题。
- 为您希望向您发送此消息的每个控件设置一个出口,并将其
sender
与每个出口进行比较。
- 有不同的操作方法,每个控件是唯一连接到每个操作的方法。然后,每个操作方法不需要确定哪个控件向您发送了该消息,因为您已经知道它是通过哪种方法发送的。
标签的问题是前面提到的重复性。忽略命名每个标签也很容易,因此您最终会查看类似代码if ([sender tag] == 42)
并且不知道/必须查找哪个控件是#42。
出口的问题是您的操作方法可能会变得很长,并且无论如何可能正在做多种不同的事情,而这些事情在同一方法中没有任何业务。(这也是标签的问题。)
所以,我通常更喜欢第三种解决方案。为将您作为其目标的每个按钮(或其他控件)创建一个操作方法。您通常会将方法和按钮命名为相同的名称(likesave:
和“Save”)或非常相似的名称(liketerminate:
和“Quit”),因此您只需阅读每个方法即可知道它属于哪个按钮。