Не можете передать аргументы в методы @selector? - PullRequest
2 голосов
/ 10 января 2012

В настоящее время я пытаюсь использовать UIB-кнопку с заголовком «X» для удаления спрайта из вида.

По сути, мой код работает так, что при касании Sprite отправляется сообщение делегату (View Controller), который передает выбранный спрайт (Sprite *). В этом методе я рисую UIB-кнопку поверх этого спрайта. Пока все хорошо.

Однако проблема в том, что теперь я хочу, чтобы мой 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];}

Однако, похоже, я не могу так аргументировать селектор. Любые идеи о том, как я могу настроить это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Вы должны сделать это в классе 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 голосов
/ 10 января 2012

Селектор - это просто идентификатор метода, а не вызов метода, поэтому вы не можете включать параметры, как если бы это был вызов метода.

Обычный способ управления чем-то подобным - для контроллера вида посмотреть на кнопку, к которой вы прикоснулись, выяснить, с каким спрайтом он связан, и удалить спрайт. Вероятно, именно контроллер представления поставил спрайт и кнопку в представление на первое место, поэтому он должен иметь всю необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...