提问人:html_programmer 提问时间:10/14/2011 最后编辑:html_programmer 更新时间:1/16/2014 访问量:487
将方法作为参数传递
Pass method as argument
问:
我可以将方法作为参数传递吗? 在下面的示例中,我没有成功传递 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];
}
有什么建议,我该怎么做?谢谢!
答:
6赞
sidyll
10/14/2011
#1
您需要编译器指令来从方法名称中提取选择,就像创建计时器时所做的那样:@selector
[self TimeViewWithtimeInterval:.6 selector:@selector(targetOpenView)];
并将参数定义为类型:SEL
-(void) TimeViewWithtimeInterval:(float)interval selector:(SEL)openViewMethod
{
...
}
然后,在将参数传递给 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];
评论
0赞
html_programmer
10/14/2011
嘿,谢谢,但是我在 [self TimeViewWithtimeInterval:.6 selector:targetOpenView]...
0赞
bbum
10/14/2011
用您尝试过的内容更新您的问题。这个答案是正确的。
0赞
html_programmer
10/14/2011
我在方法“TimeViewWithTimeInterval”中添加了“(SEL)”,但是我有问题的是方法“targetTimeView”。当我输入“targetOpenView”时,我立即收到错误...他不会让我把方法作为论据......
0赞
sidyll
10/14/2011
不用担心:-)我只是用我错过的东西更新了答案。
1赞
html_programmer
10/14/2011
废话,我要去给自己买一副眼镜!你必须有千里眼才能知道这一点!再次感谢!
评论
timeViewWithTimeInterval:selector: