所以我用类方法创建了一个类CommonMethods:
+ (CCMenu *)createMenu:(NSString *)menuName atPosition:(CGPoint)position {
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:self selector:@selector(choose:)];
CCMenu *menuBlockMenu = [CCMenu menuWithItems:menuBlock, nil];
menuBlockMenu.position = position;
return menuBlockMenu;
}
现在,在我的MainClass中,它包含chool:方法,我创建了一个菜单:
CCMenu *regularBlockMenu = [CommonMethods createMenu:kbRegularBlock atPosition:position];
[self addChild:regularBlockMenu];
当我点击菜单时,我的程序崩溃了,因为它不理解选择器调用。我该如何实现?我想创建一个CommonMethods方法,因为我将在许多类中反复使用这个方法。
谢谢你的帮助。
您想在类MainClass中选择一个方法吗?如果是这样的话,您需要稍微修改一下createMenu函数。试试这个,
+ (CCMenu *)createMenu:(NSString *)menuName atPosition:(CGPoint)position forTarget:(id)target
{
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:target selector:@selector(choose:)];
CCMenu *menuBlockMenu = [CCMenu menuWithItems:menuBlock, nil];
menuBlockMenu.position = position;
return menuBlockMenu;
}
然后在MainClass中:
CCMenu *regularBlockMenu = [CommonMethods createMenu:kbRegularBlock atPosition:position forTarget:self];
[self addChild:regularBlockMenu];
并且您需要在MainClass 中定义-(void)choose:(id)sender;
因此,这是在设置choose的目标:成为MainClass的实例,而不是CommonMethods。
由于类方法中的self
引用类,因此不应将self
作为选择器的目标:
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:self selector:@selector(choose:)];
// HERE ------^^^^
相反,您应该将选择器发送到响应选择器choose:
的对象
您需要使CommonMethods成为单例
@implementation CommonMethods
static CommonMethods* globalCommonMethods = nil;
+(CommonMethods*)gCommonMethods
{
if( !globalCommonMethods ) globalCommonMethods = [[CommonMethods alloc] init];
return globalCommonMethods;
}
-(CCMenu *)createMenu:(NSString *)menuName atPosition:(CGPoint)position {
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:self selector:@selector(choose:)];
CCMenu *menuBlockMenu = [CCMenu menuWithItems:menuBlock, nil];
menuBlockMenu.position = position;
return menuBlockMenu;
}
-(void)choose:(id)sender
{
//do stuff
}
现在,当您需要访问CommonMethods时,请使用[CommonMethodsgCommonMethods]