Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 什么';在代码中,从with调用iAction的最佳方法是什么?_Ios_Iphone_Cocoa Touch_Interface Builder_Ibaction - Fatal编程技术网

Ios 什么';在代码中,从with调用iAction的最佳方法是什么?

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

例如,假设我有一个iAction,它连接到interface builder中的ui按钮

- (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相关代码添加依赖项。