Ios 什么';在代码中,从with调用iAction的最佳方法是什么?
例如,假设我有一个iAction,它连接到interface builder中的ui按钮Ios 什么';在代码中,从with调用iAction的最佳方法是什么?,ios,iphone,cocoa-touch,interface-builder,ibaction,Ios,Iphone,Cocoa Touch,Interface Builder,Ibaction,例如,假设我有一个iAction,它连接到interface builder中的ui按钮 - (IBAction)functionToBeCalled:(id)sender { // do something here } 在我的代码中,例如在另一个方法中,调用iAction的最佳方法是什么 如果我尝试这样调用它,我会收到一个错误: [self functionToBeCalled:]; 但是,如果我试着这样称呼它(我认为有点作弊),它很管用: [self functionTo
- (IBAction)functionToBeCalled:(id)sender
{
// do something here
}
在我的代码中,例如在另一个方法中,调用iAction的最佳方法是什么
如果我尝试这样调用它,我会收到一个错误:
[self functionToBeCalled:];
但是,如果我试着这样称呼它(我认为有点作弊),它很管用:
[self functionToBeCalled:0];
正确地称呼它的正确方式是什么?正确的方式是:
- [self functionToBeCalled:nil]
传递一个nil发送方,表示它不是通过通常的框架调用的
或
- [self functionToBeCalled:self]
将自己作为发送者,这也是正确的
选择哪一个取决于函数的具体功能以及它对发送者的期望。从语义上讲,调用
iAction
只能由UI事件触发(例如点击按钮)。如果需要从多个位置运行同一代码,则可以将该代码从iAction
提取到专用方法中,并从两个位置调用该方法:
- (IBAction)onButtonTap:(id)sender {
[self doSomething];
}
这允许您根据发送方执行额外的逻辑(也许您可以将相同的操作分配给多个按钮,并根据
sender
参数决定要执行的操作)。而且还减少了您需要在iAction
(保持控制器实现干净)中编写的代码量。通过编程方式传递[sender tag]怎么样?@Andy,您可以将任何NSView子类传递给这些方法。实际上,你可以传递任何对象!(id)是一个可以保存任何参数的泛型类型。只需确保发送iAction期望接收的内容(通常是NSView的子类)@ZaidPathan,只有在声明iAction方法时没有发送方参数时才有效。这是有效的,但直接调用iActions是不好的编程实践,因为这些函数是由UI代码调用的。最好创建一个新函数并从两个位置调用它。这样,我们就不会向UI相关代码添加依赖项。