Один селектор для нескольких элементов меню в COcos2d - PullRequest
1 голос
/ 04 декабря 2011
//CCMenuItem
    CCMenuItem *starMenuItem = [CCMenuItemImage 
                                itemFromNormalImage:@"Button0000.png" selectedImage:@"Fork0002.png" 
                                target:self selector:@selector(starButtonTapped:)];

    CCMenuItem *starMenuItem2 = [CCMenuItemImage 
                                itemFromNormalImage:@"Button0001.png" selectedImage:@"Button0002.png" 
                                target:self selector:@selector(starButtonTapped:)];
    CCMenuItem *starMenuItem3 = [CCMenuItemImage 
                                 itemFromNormalImage:@"Button0003.png" selectedImage:@"Button0004.png" 
                                 target:self selector:@selector(starButtonTapped:)];
    CCMenuItem *starMenuItem4 = [CCMenuItemImage 
                                 itemFromNormalImage:@"Button0005.png" selectedImage:@"Button0006.png" 
                                 target:self selector:@selector(starButtonTapped:)];
    CCMenuItem *starMenuItem5 = [CCMenuItemImage 
                                 itemFromNormalImage:@"Button0007.png" selectedImage:@"Button0008.png" 
                                 target:self selector:@selector(starButtonTapped:)];
    CCMenuItem *starMenuItem6 = [CCMenuItemImage 
                                 itemFromNormalImage:@"Button0009.png" selectedImage:@"Button0010.png" 
                                 target:self selector:@selector(starButtonTapped:)];
    CCMenuItem *starMenuItem7 = [CCMenuItemImage 
                                 itemFromNormalImage:@"Button0011.png" selectedImage:@"Button0012.png" 
                                 target:self selector:@selector(starButtonTapped:)];

    //CCMenu
    CCMenu *starMenu = [CCMenu menuWithItems:starMenuItem,starMenuItem2,starMenuItem3,starMenuItem4,starMenuItem5,starMenuItem6,starMenuItem7,nil];

    starMenu.position = ccp(winSize.width/2  , 25);
    [starMenu alignItemsHorizontally];
    [self addChild:starMenu];


-(void)starButtonTapped:(id)sender {
if (/*press starMenuItem4*/) {
   /*do this*/
}else if(/*press starMenuItem4*/){
 /* do another thing*/
}
}

Все мои menuItems имеют общий селектор с именем "" starButtonTapped: ". Однако, как мне отличить, какую кнопку я нажал в селекторе, чтобы я мог делать разные вещи для каждой кнопки? Я стараюсь не использовать много селекторов, так как они грязные. Спасибо за помощь.

1 Ответ

2 голосов
/ 04 декабря 2011

Вы можете использовать теги: starMenuItem.tag = 1;

-(void)starButtonTapped:(CCMenuItem*)sender {

  switch(sender.tag) {
   case 1: // starMenuItem pressed 
     /*do this*/
     break;
   case 2: // starMenuItem2 pressed 
     /*do that*/
     break;
  }
}
...