2012-01-10 107 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

選擇器是一個簡單的方法識別,而不是方法的調用,所以你不能像包含方法調用一樣包含參數。

通常的方式來管理這樣的事情將是視圖控制器看看被觸摸的按鈕,找出它與哪個精靈關聯,並刪除精靈。這可能是視圖控制器將精靈和按鈕放在視圖中的第一位,所以它應該有它需要的所有信息。