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

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

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

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

3 ответов


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

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

- (void)myAction:(id)sender;

где sender-указатель на объект, который отправляет действие. В ваш код, когда thisIconButton прослушивается, что кнопка будет принят в качестве отправителя.


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


одной из наиболее распространенных причин для отправки данных через селектор является использование пользовательской кнопки в UITableViewCell.

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