Как передать аргумент в @selector?
Как я могу передать аргумент в @selector
для моего кода ниже?
[thisIconBtn addTarget:self action:@selector(changeIconState) forControlEvents:UIControlEventTouchUpInside];
-(void)changeIconState:(UITableViewCell*)thisCell
{
//do something
}
3 ответа:
Во-первых, двоеточие является частью селектора:
Во-вторых, действия-это методы, которые принимают определенный набор параметров - вы не можете просто использовать любой метод в качестве действия. Обычно действия выглядят так:@selector(changeIconState:)
.- (void)myAction:(id)sender;
Где sender-указатель на объект, отправляющий действие. В вашем коде, когда эта кнопка нажата, эта кнопка будет передана как отправитель.
Если вам нужна ячейка, к которой принадлежит кнопка, получите ее с помощью
button.superview.superview
, но я не думаю, что вы можете изменить аргументы целевых методов для управляющих событий.
Одна из наиболее распространенных причин для отправки данных через селектор-это когда вы используете пользовательскую кнопку в UITableViewCell.
Маттиас Баух предоставил отличный пример кода о том, как получить indexPath, посмотрев ячейку на отправителе в соответствующем сообщении. См. https://stackoverflow.com/a/5690329/654870 .