比方说,我有一个 IBAction ,它与界面构建器中的 UIButton 相连。
- (IBAction)functionToBeCalled:(id)sender
{
// do something here
}
使用我的代码,例如在另一种方法中说,调用 IBAction 的最佳方式是什么?
如果我尝试这样称呼它,我收到一个错误:
[self functionToBeCalled:];
但是,如果我试着这样称呼它(我觉得有点作弊),它可以正常工作:
[self functionToBeCalled:0];
正确调用它的正确方法是什么?
答案 0 :(得分:67)
正确的方法是:
- [self functionToBeCalled:nil]
传递一个nil发件人,表明它没有通过通常的框架调用。
或强>
- [self functionToBeCalled:self]
将自己作为发件人传递,这也是正确的。
选择哪一个取决于函数的确切内容以及发件人的期望。
答案 1 :(得分:10)
从语义上讲,调用IBAction
应仅由UI事件触发(例如按钮点击)。如果您需要从多个位置运行相同的代码,那么您可以将IBAction
中的代码提取到专用方法中,并从两个位置调用该方法:
- (IBAction)onButtonTap:(id)sender {
[self doSomething];
}
这允许您根据发件人执行额外的逻辑(也许您可以将相同的操作分配给多个按钮,并根据sender
参数决定要执行的操作)。并且还减少了您需要在IBAction
中编写的代码量(这可以使您的控制器实现保持干净)。