从代码中调用IBAction的最佳方法是什么?

时间:2010-05-22 19:07:10

标签: ios iphone cocoa-touch interface-builder ibaction

比方说,我有一个 IBAction ,它与界面构建器中的 UIButton 相连。

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

}

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

如果我尝试这样称呼它,我收到一个错误:

[self functionToBeCalled:];

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

[self functionToBeCalled:0];

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

2 个答案:

答案 0 :(得分:67)

正确的方法是:

- [self functionToBeCalled:nil] 

传递一个nil发件人,表明它没有通过通常的框架调用。

- [self functionToBeCalled:self]

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

选择哪一个取决于函数的确切内容以及发件人的期望。

答案 1 :(得分:10)

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

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

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