传递方法作为参数

Tra*_*ace 3 objective-c argument-passing

我可以传递一个方法作为参数吗?我没有成功传递下面示例中的方法targetOpenView:

-(void) targetTimeView:(id)sender {    
[self TimeViewWithtimeInterval:.6 selector:targetOpenView]; //targetOpenView does NOT work
}

-(void) timeViewWithtimeInterval:(float)interval selector:openViewMethod{
[NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(openViewMethod) userInfo:nil repeats:NO];   
}
Run Code Online (Sandbox Code Playgroud)

有什么建议我可以做这个工作吗?谢谢!

sid*_*yll 6

您需要@selector编译器指令从方法名称中提取select,就像您在创建计时器时所做的那样:

[self TimeViewWithtimeInterval:.6 selector:@selector(targetOpenView)];
Run Code Online (Sandbox Code Playgroud)

并定义您的类型的参数SEL:

-(void) TimeViewWithtimeInterval:(float)interval selector:(SEL)openViewMethod
{    
 ...
}
Run Code Online (Sandbox Code Playgroud)

然后,当将参数传递给NSTimer方法时,您可以放弃,@selector因为该类型已经是一个选择器:

[NSTimer scheduledTimerWithTimeInterval:interval target:self
                               selector:@selector(openViewMethod) /* here */
                               userInfo:nil repeats:NO];   

[NSTimer scheduledTimerWithTimeInterval:interval target:self
                               selector:openViewMethod /* pass it directly */
                               userInfo:nil repeats:NO];
Run Code Online (Sandbox Code Playgroud)