如何在@selector中传递参数?

8
我该如何在下面的代码中通过@selector传递参数?
注:@selector是Objective-C中的一个关键字,用于指定方法的名称。
[thisIconBtn addTarget:self action:@selector(changeIconState) forControlEvents:UIControlEventTouchUpInside];

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

有一种方法可以调用带有多个参数的选择器,而这个问题已经在这里回答了...你可以在这里阅读它:https://dev59.com/9HNA5IYBdhLWcg3wUL1Y - iruleonu
3个回答

6

首先,冒号是选择器的一部分:@selector(changeIconState:)

其次,动作是带有特定参数集的方法 - 你不能只使用任何方法作为动作。通常,动作看起来像这样:

- (void)myAction:(id)sender;

sender是指向发送操作的对象的指针。在你的代码中,当点击thisIconButton时,该按钮将作为sender传递。


每个单元格上都有一个按钮。我该怎么做? - Zhen
取决于您如何设置。您可以检查按钮的superview以确定它在哪个单元格中。或者,您可以使按钮的目标为单元格而不是视图控制器。然后,单元格的操作可以调用您的-changeIconState:方法。 - Caleb

1

如果您想获取按钮所属的单元格,请使用button.superview.superview,但我认为您无法更改控件事件的目标方法参数。


0

尝试通过选择器发送数据的最常见原因之一是在UITableViewCell中使用自定义按钮时。

Matthias Bauch在相关帖子中提供了一个非常好的代码示例,演示如何通过查找发送器上的单元格来获取indexPath。请参见https://dev59.com/q2025IYBdhLWcg3w_a6r#5690329


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接