2012-05-10 34 views
2

當菜單被點擊時,下面的塊將被調用。objective c將塊轉換爲選擇器

CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon 
              selectedSprite:icon2 
              block:^(id sender) { 
    [self buttonClickedWithUnlocked:unlocked world:world]; 
}]; 

我可以將參數傳遞給塊內的方法。

但現在我正在翻譯obj-c到C++。因此塊不被支持。我需要使用像選擇:

CCMenuItem* iconItem = 
CCMenuItemSprite::itemFromNormalSprite(icon, icon2, this,    
menu_selector(SomeClass::buttonClickedWithUnlockedWorld(unlocked, w))); 

,但我不能夠在參數(不選擇支持)來傳遞 那麼有沒有任何其他的方式做到這一點?

如果你不使用C++,選擇的對象 - 版本是:

CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon 
              selectedSprite:icon2 
              target: self 
              selector: @selector(buttonClickedWithUnlocked) 
}]; 

不過,我仍然不能在任何參數的@selector通過其中。 任何其他方法?

回答

2

您的obj-c版本應爲selector: @selector(buttonClickedWithUnlocked::)而不是selector: @selector(buttonClickedWithUnlocked)(請注意::)。因此,對於您的C++版本,您需要創建類似[target performSelector:selector withObject:obj1 withObject:obj2]的內容。

所以在對象 - 它可能是這樣的:

CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon 
             selectedSprite:icon2 
             target: self 
             selector: @selector(buttonClickedWithUnlocked::) 
             param1: [NSNumber numberWithInt:unlocked] 
             param2: [NSNumber numberWithBool:w] 
}]; 

buttonClickedWithUnlocked必須定義有兩個NSNumber的參數。

+0

該方法獲得通過?你能提供簽名或代碼示例嗎?我可以傳入一個整數和一個布爾值嗎? – OMGPOP

+0

@OMGPOP我編輯了我的答案。 –