Iphone 如何在目标C中将类参数传递给选择器?
我想通过单击按钮来设置类平铺值Iphone 如何在目标C中将类参数传递给选择器?,iphone,objective-c,ios5,xcode4.2,kobold2d,Iphone,Objective C,Ios5,Xcode4.2,Kobold2d,我想通过单击按钮来设置类平铺值 如果单击“加号”,它将有一个字符串值=@“+” 如果单击onMinus,它将有一个字符串值=@“-” 这是密码 //Class Tile @interface Tile : TouchableNode { NSString *val; } -(void) setVal:(NSString *)v { val = v; } -(NSString *) getVal { return val; } 另一节课上 我有这样的代码 fo
- 如果单击“加号”,它将有一个字符串值=@“+”
- 如果单击onMinus,它将有一个字符串值=@“-”
//Class Tile
@interface Tile : TouchableNode {
NSString *val;
}
-(void) setVal:(NSString *)v
{
val = v;
}
-(NSString *) getVal
{
return val;
}
另一节课上
我有这样的代码
for(Tile *tile in player)
{
if (tile.getVal == @"P") {
if (pauseStatus == 0) {
pauseStatus = 1;
[[CCDirector sharedDirector] pause];
CGSize size = [[CCDirector sharedDirector] winSize];
pauseLayer=[[CCLayer alloc] init];
pauseLayer.anchorPoint=ccp(0,0);
pauseLayer = [CCLayerColor layerWithColor: ccc4(0, 0, 255, 125) width: 300 height: 150];
pauseLayer.position = ccp(size.width/2, size.height/2);
pauseLayer.isRelativeAnchorPoint = YES;
[self addChild: pauseLayer z:8];
//Here are 2 two button that when user click it will have @"+" value or @"-"
plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png" target:self selector:@selector(onMinus:)];
pauseMenu = [CCMenu menuWithItems:plusBtn, minusBTn, nil];
[pauseMenu alignItemsHorizontally];
[self addChild:pauseMenu z:10];
}
}
}
我有onPlus&onMinus方法,我想把对象平铺发送到那个方法
-(void)onPlus:(Tile *) set
{
NSString *plus = @"+";
[set setVal:plus];
}
-(void)onMinus:(Tile *) set
{
NSString *minus = @"-";
[set setVal:minus];
}
如何将对象平铺传递给方法??
或者它有另一种方法来实现它???如果您想将
平铺
对象发送到onPlus
处理程序,只需将CCMenuItemImage子类化并生成平铺属性:
@interface MyCustomCCMenuItemImage : CustomCCMenuItemImage
@property (nonatomic, retain) Tile* tile;
@end
下面是一个大致的代码示例:
- (void)someMethod
{
for(Tile *tile in player)
{
plusBtn = [MyCustomCCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
plusBtn.tile = tile ;
}
}
//Your handler
-(void)onPlus:(id)sender
{
Tile *myTile = sender.tile;
}
如果要将
Tile
对象发送到onPlus
处理程序,只需将CCMenuItemImage子类化并生成一个Tile属性:
@interface MyCustomCCMenuItemImage : CustomCCMenuItemImage
@property (nonatomic, retain) Tile* tile;
@end
下面是一个大致的代码示例:
- (void)someMethod
{
for(Tile *tile in player)
{
plusBtn = [MyCustomCCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
plusBtn.tile = tile ;
}
}
//Your handler
-(void)onPlus:(id)sender
{
Tile *myTile = sender.tile;
}
CCMenuItemImage
继承自具有void*userData
属性的CCNode
。如果将tile
分配给userData
,则可以在onPlus
/onMinus
方法中从(id)发送方
取回它
plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
plusBtn.userData = (void*)tile; // You may need a bridge cast in ARC
minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png" target:self selector:@selector(onMinus:)];
minusBTn.userData = (void*)tile;
-(void)onPlus:(id)senderObj {
CCNode *sender = (CCNode*)senderObj;
Tile *myTile = (Tile*)sender.userData; // Again you may need a bridge cast here
}
CCMenuItemImage
继承自具有void*userData
属性的CCNode
。如果将tile
分配给userData
,则可以在onPlus
/onMinus
方法中从(id)发送方
取回它
plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
plusBtn.userData = (void*)tile; // You may need a bridge cast in ARC
minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png" target:self selector:@selector(onMinus:)];
minusBTn.userData = (void*)tile;
-(void)onPlus:(id)senderObj {
CCNode *sender = (CCNode*)senderObj;
Tile *myTile = (Tile*)sender.userData; // Again you may need a bridge cast here
}
对于字符串比较,最好使用
[tile.getVal isEqualToString:@"P"]
因为您使用的方法只有在它是完全相同的字符串(在相同的内存位置)时才有效,而不是其他地方的等效字符串。对于字符串比较,最好使用
[tile.getVal isEqualToString:@"P"]
因为您使用的方法只有在它是完全相同的字符串(在相同的内存位置)时才有效,而不是其他地方的等效字符串。这是一个有价值的观察,但是注释是一个更好的地方,因为它不是OP的问题。这是一个有价值的观察,但是注释是一个更好的地方,因为这不是OP的问题啊。。。顺便说一句,当暂停层启动这两个按钮时,屏幕是暂停的,但程序仍在运行。。。换句话说,我想等待按钮的动作,这样在我按下按钮后。。。程序可以连续运行。。。所以我也想知道一个按钮的等待动作功能。如果程序仍然在运行,它不是按照你编写的方式工作吗?您是否有机会尝试
userData
技巧?您的代码正常,但在我的函数完成后,它设置为@“+”或@“-”。。所以我得到了我不想要的值@“P”。所以我想等到我按下按钮。我问的最近两条评论是一个新问题。。。问题是“如何等到CCmenuItemImage被按下?”啊。。。顺便说一句,当暂停层启动这两个按钮时,屏幕是暂停的,但程序仍在运行。。。换句话说,我想等待按钮的动作,这样在我按下按钮后。。。程序可以连续运行。。。所以我也想知道一个按钮的等待动作功能。如果程序仍然在运行,它不是按照你编写的方式工作吗?您是否有机会尝试userData
技巧?您的代码正常,但在我的函数完成后,它设置为@“+”或@“-”。。所以我得到了我不想要的值@“P”。所以我想等到我按下按钮。我问的最近两条评论是一个新问题。。。问题是“如何等待CCmenuItemImage被按下?”