在类之间传递@selector,从实例化的Object调用该方法

时间:2013-07-13 11:43:11

标签: ios objective-c cocoa-touch selector subclass

我有一个带有方法的viewController:doSomething:。我有一个类菜单设置一个带有按钮的菜单,我在其上“添加了一个目标”,所以我可以从按钮调用一个选择器。此子类是从viewController实例化的。

当我点击实例菜单的按钮时,我想调用viewController中的方法。设置它的显而易见的方法是为NSNotifications添加一个观察者,但看起来有点笨拙。我可以以某种方式将选择器从视图控制器传递到实例,如下所示:

在Menu.h中

-(void)setupMenuWithAction:(SEL)action {

从ViewController调用:

[menu setupMenuWithAction:@selector(doSomething:)];

尝试它并且它不起作用,当点击按钮时给出无法识别的选择器错误,但我想知道它是否是一个有效的概念,如果是,我该如何解决它。

2 个答案:

答案 0 :(得分:3)

更改Menu.h中的方法以包含目标 - 将其设为-(void)setupMenuWithAction:(SEL)action andTarget:(id)target。在该方法中,使用[target performSelector:action];

调用选择器

然后,从ViewController,致电[menu setupMenuWithAction:@selector(doSomething:) andTarget:self];

答案 1 :(得分:0)

对于具有实际选择器的类中的函数,请使用' +'而不是' - '。即使用类方法而不是实例方法