无法将参数传递给@selector方法?

时间:2012-01-10 05:54:59

标签: iphone ios xcode ipad

我目前正在尝试使用标题为“X”的UIButton作为从视图中删除Sprite的方法。

基本上,我的代码工作,以便在触摸Sprite时,会向委托(View Controller)发送一条消息,该委托传递已选择的(Sprite *)精灵。在这个方法中,我在该sprite之上绘制一个UIButton。到目前为止,非常好。

然而,问题是我现在希望我的UIButton在按下按钮时运行@selector删除该sprite。

最初我试过这个:

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

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

但是,我似乎无法将参数放入选择器中。关于我如何调整这个的任何想法?

由于

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:2)

选择器只是方法标识符,而不是方法的调用,因此您不能将参数包含在方法调用中。

管理这样的事情的通常方法是让视图控制器查看被触摸的按钮,找出与之关联的精灵,并删除精灵。视图控制器可能首先将精灵和按钮放在视图中,因此它应该具有所需的所有信息。