32

例如,我有一个IBAction,它连接到界面生成器中的UIButton

- (IBAction)functionToBeCalled:(id)sender
{
   // do something here   

}

在我的代码中,例如在另一种方法中,调用该IBAction的最佳方法是什么?

如果我尝试这样调用它,我会收到一个错误:

[self functionToBeCalled:];

但是,如果我尝试这样称呼它(我认为有点作弊),它可以正常工作:

[self functionToBeCalled:0];

正确调用它的正确方法是什么?

4

2 回答 2

70

正确的方法是:

- [self functionToBeCalled:nil] 

传递一个 nil 发送者,表明它不是通过通常的框架调用的。

或者

- [self functionToBeCalled:self]

将自己作为发件人传递,这也是正确的。

选择哪一个取决于函数的具体作用,以及它期望发送者是什么。

于 2010-05-22T19:11:22.517 回答
12

从语义上讲,调用 anIBAction应该仅由 UI 事件触发(例如,点击按钮)。如果您需要从多个地方运行相同的代码,那么您可以将该代码从 中提取IBAction到一个专用方法中,并从两个地方调用该方法:

- (IBAction)onButtonTap:(id)sender {
    [self doSomething];
}

这允许您根据发送者执行额外的逻辑(也许您可以将相同的操作分配给多个按钮并根据sender参数决定要做什么)。并且还减少了您需要在其中编写的代码量IBAction(这使您的控制器实现保持干净)。

于 2015-10-01T08:49:49.263 回答