Как передать аргумент в @selector?


Как я могу передать аргумент в @selector для моего кода ниже?

[thisIconBtn addTarget:self action:@selector(changeIconState) forControlEvents:UIControlEventTouchUpInside];

-(void)changeIconState:(UITableViewCell*)thisCell
{
  //do something
}
3 8

3 ответа:

Во-первых, двоеточие является частью селектора: @selector(changeIconState:).

Во-вторых, действия-это методы, которые принимают определенный набор параметров - вы не можете просто использовать любой метод в качестве действия. Обычно действия выглядят так:
- (void)myAction:(id)sender;

Где sender-указатель на объект, отправляющий действие. В вашем коде, когда эта кнопка нажата, эта кнопка будет передана как отправитель.

Если вам нужна ячейка, к которой принадлежит кнопка, получите ее с помощью button.superview.superview, но я не думаю, что вы можете изменить аргументы целевых методов для управляющих событий.

Одна из наиболее распространенных причин для отправки данных через селектор-это когда вы используете пользовательскую кнопку в UITableViewCell.

Маттиас Баух предоставил отличный пример кода о том, как получить indexPath, посмотрев ячейку на отправителе в соответствующем сообщении. См. https://stackoverflow.com/a/5690329/654870 .