2013-07-13 33 views
-2

我有一个的viewController与方法调用方法:doSomething的:.我有一个菜单,它设置了一个按钮的菜单,我在其上添加了一个目标,这样我就可以从按钮中调用一个选择器。这个子类是从viewController实例化的。传递类之间的@selector,从实例化对象

当我点击实例化菜单的按钮,我想打电话给在的viewController的方法。设置它的一个显而易见的方法是添加一个观察者到NSNotifications中,但看起来很有趣。我可以以某种方式从视图控制器的选择传递给例如像这样:

在Menu.h

-(void)setupMenuWithAction:(SEL)action { 

从视图控制器称为:

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

尝试过了,这是行不通的,当按钮被点击时会给出无法识别的选择器错误,但是我想知道它是否是一个有效的概念,如果有的话,我该如何解决它。

回答

3

Menu.h更改方法包括目标 - 让-(void)setupMenuWithAction:(SEL)action andTarget:(id)target。在这一方法中,调用与[target performSelector:action];

选择然后,从ViewController,叫[menu setupMenuWithAction:@selector(doSomething:) andTarget:self];

+0

很有趣,但不知道如何添加位:[对象performSelector:行动] ...的方法setupMenuWithAction:只是让一个按钮,添加一个目标与选择。我做另一个方法来调用performSelector:?对不起,密集。 – Mrwolfy

+1

@Mrwolfy没问题;没有意识到你想直接添加它作为按钮的动作。使用此 - '''[myButton的addTarget:目标动作:动作forControlEvents:UIControlEventTouchUpInside]''' – gtmtg

+0

OK,是的,这非常有意义,我做到了。尽管如此,仍然给我未知的选择器错误。 – Mrwolfy

0

对于具有实际的选择类的功能,使用“+”,而不是“ - ”。即使用类方法,而不是实例方法