单击菜单时将调用以下 block 。
CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon
selectedSprite:icon2
block:^(id sender) {
[self buttonClickedWithUnlocked:unlocked world:world];
}];
我可以将参数传递给 block 内的方法。
但现在我正在将 obj-c 翻译为 c++。因此不支持 block 。我需要使用像这样的选择器:
CCMenuItem* iconItem =
CCMenuItemSprite::itemFromNormalSprite(icon, icon2, this,
menu_selector(SomeClass::buttonClickedWithUnlockedWorld(unlocked, w)));
但是我无法传入参数(选择器不支持) 那么还有其他方法可以做到吗?
如果你不使用 c++,Obj-c 版本的选择器是:
CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon
selectedSprite:icon2
target: self
selector: @selector(buttonClickedWithUnlocked)
}];
但是,我仍然无法将任何参数传递给@selector。 还有其他方法吗?
最佳答案
您的 obj-c 版本应该是 selector: @selector(buttonClickedWithUnlocked::)
而不是 selector: @selector(buttonClickedWithUnlocked)
(请注意 ::
)。因此,对于您的 C++ 版本,您需要创建类似 [target PerformSelector:selector withObject:obj1 withObject:obj2]
的内容。
所以在 Obj-C 中它可能看起来像这样:
CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon
selectedSprite:icon2
target: self
selector: @selector(buttonClickedWithUnlocked::)
param1: [NSNumber numberWithInt:unlocked]
param2: [NSNumber numberWithBool:w]
}];
和 buttonClickedWithUnlocked
必须定义为具有两个 NSNumber 参数。
关于iphone - Objective c 将 block 转换为选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532662/