用直接代码替换@selector

时间:2012-10-17 18:08:41

标签: ios cocoa-touch selector

  

可能重复:
  Can I pass a block as a @selector with Objective-C?

我有这段代码:

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

但是因为doSomething包含如此少的代码,我想知道是否可以将代码直接放在这里而不是让它运行doSomething。

我已经尝试过了:

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

但它只是给“不兼容的类型SEL”发送“send(void)^(void)”错误。

有办法做到这一点吗?如果是这样,那么正确的语法是什么?

谢谢!

2 个答案:

答案 0 :(得分:5)

好吧,你所有的答案都使用了许多不必要的代码,这些代码已经过时且不再有效。

我自己找到了一个答案,虽然我改编并得到了这个答案:

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

哪种方法正常。

答案 1 :(得分:0)

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