2010-05-22 86 views
28

说例如我有一个IBAction,它被连接到界面生成器中的UIButton从代码中调用IBAction的最佳方式是什么?

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

} 

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

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

[self functionToBeCalled:]; 

但是,如果我尝试这样称呼它(作弊了一下,我认为),它工作正常:

[self functionToBeCalled:0]; 

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

回答

66

正确的方法可以是:

- [self functionToBeCalled:nil] 

要传递一个零发件人,这表明它不是通过通常的框架调用。

OR

- [self functionToBeCalled:self] 

要通过自己作为发件人,这也是正确的。

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

+0

完美,谢谢! – iwasrobbed 2010-05-22 19:12:44

+0

如何通过编程方式传递[sender标签]呢? – Andy 2012-06-08 09:05:31

+1

@Andy,你可以将任何NSView子类传递给这些方法。实际上,你可以传递任何NSObject! (id)是一个可以容纳任何参数的泛型类型。只要确保发送IBAction希望收到的东西(通常是NSView的子类) – 2012-06-18 20:06:16

6

IMO调用IBAction应该仅由UI操作(例如按钮水龙头)触发。如果您需要运行多个地方一些代码,那么你就可以从中提取IBAction为代码到一个新的方法,并调用该方法,从两个地方

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

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

相关问题