2012-01-10 64 views
1

我目前正在尝试使用标题为“X”的UIButton作为从视图中删除Sprite的一种方式。无法将参数传递给@selector方法?

基本上,我的代码的工作原理是,当一个Sprite被触摸时,一条消息被发送到委托(View Controller),该委托传递已被选中的(Sprite *)精灵。在这个方法中,我在该精灵的顶部绘制了一个UIButton。到现在为止还挺好。

但是,问题是我现在想让我的UIButton运行一个@selector来删除那个精灵,只要按下按钮。

起初我尝试这样:

-(void)spriteSelected:(Sprite *)sprite{ //delegate method implementation 
     [sprite.button addTarget:self action:@selector(removeSprite:sprite) forControlEvents: UIControlEventTouchDown] 
}  

-(void)removeSprite:(Sprite *)sprite{ 
     [sprite removeFromSuperView];} 

但是,似乎我不能把争论变成这样的选择。关于如何调整这个的任何想法?

感谢

+1

嗨,检查此链接http://stackoverflow.com/questions/3716633/passing-parameters-on-button-actionselector – SriPriya 2012-01-10 06:01:51

回答

3

你应该这样做在Sprite类,所以在原来的类:

-(void)spriteSelected:(Sprite *)sprite{ 
     [sprite youAreSelected]; 
} 

Sprite类:

-(void)youAreSelected { 
    [self.button addTarget:self action:@selector(removeMe:) forControlEvents: UIControlEventTouchDown]; 
} 

-(void)removeMe:(id)sender { 
    [self removeFromSuperView]; 
} 
2

选择器是一个简单的方法识别,而不是方法的调用,所以你不能像包含方法调用一样包含参数。

通常的方式来管理这样的事情将是视图控制器看看被触摸的按钮,找出它与哪个精灵关联,并删除精灵。这可能是视图控制器将精灵和按钮放在视图中的第一位,所以它应该有它需要的所有信息。