2012-10-17 27 views
4

可能重复:
Can I pass a block as a @selector with Objective-C?直接代码更换@selector

我有这样的代码:

[myButton addTarget:self action:@selector(doSomething:) forControlEvents:UIControlEventTouchUpInside]; 

但由于DoSomething的包含了那么少的代码,我想知道如果可以将代码直接放在这里,而不是让它运行doSomething。

我已经试过这已经:

[myButton addTarget:self action:^ { /* code here */ } forControlEvents:UIControlEventTouchUpInside]; 

但它只是给 “送(无效)^(无效),以不兼容的类型SEL” 的错误。

有没有办法做到这一点?如果是的话,什么是正确的语法?

谢谢!

+0

你甚至认为这可以工作吗? – 2012-10-17 18:14:42

回答

5

好了,所有的答案都使用了很多不必要的代码,这是可怕的过时,不再工作。

我找到一个答案,虽然我自己,我适应并得到这个:

[myButton addTarget:[^{NSLog(@"Pressed the button");} copy] action:@selector(invoke) forControlEvents:UIControlEventTouchUpInside]; 

工作正常。

+0

哇。这很聪明。 +1。 – 2012-10-17 20:12:53

+0

适用于iOS7,但适用于iOS8 –

0

这似乎是可能的,但看起来像一个丑陋的黑客给我。有关解决方案的详细信息,请参阅this blog post