【问题标题】:Can't pass arguments into @selector methods?不能将参数传递给@selector 方法?
【发布时间】:2012-01-10 05:54:59
【问题描述】:

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

基本上,我的代码可以在触摸 Sprite 时向委托(视图控制器)发送一条消息,该委托传递已选择的 (Sprite *)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];}

但是,我似乎不能像那样将参数放入选择器中。关于如何调整它的任何想法?

谢谢

【问题讨论】:

标签: iphone ios xcode ipad


【解决方案1】:

您应该在 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】:

    选择器只是一个方法标识符,而不是方法的调用,因此您不能像方法调用一样包含参数。

    管理这样的事情的通常方法是让视图控制器查看被触摸的按钮,找出它与哪个精灵相关联,然后删除该精灵。可能是视图控制器首先将精灵和按钮都放在视图中,所以它应该拥有它需要的所有信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2017-01-05
      相关资源
      最近更新 更多