0

我需要使用@selector 传递参数,这是我需要使用选择器调用的方法:

-(void)clickedInfo:(NSString *)itemIndex{
// some work with itemIndex
}

我知道我能做的是使用这里描述的中间方法。

这种方法在我的情况下不起作用,因为我将目标添加到 collectionView 的 cellForItemAtIndexPath 方法中的 uibutton 中。

我需要传递给 clickedInfo 方法的参数是 indexPath.row,我无法在中间方法中获取此参数。

提前感谢

4

3 回答 3

3

因此,您希望存储一些可以通过按钮操作访问的信息。一些选项是:

  • 使用控件的标记属性。(只能存储一个整数)
  • 子类 UIButton 并将该类用于按钮。该类可以有一个存储信息的字段。
  • 使用关联对象(关联引用)将对象附加到按钮。这是最通用的解决方案。
于 2013-05-30T22:22:04.067 回答
2

您可以使用performSelector:withObject:选择器来传递对象。

例子:

[self performSelector:@selector(clickedInfo:) withObject:myIndex];

- (void) clickedInfo:(NSString *)itemIndex{
// some work with itemIndex
}

编辑:应该只是@selector(clickedInfo:)而不是我以前的。

编辑:使用@newacct 的建议,我建议做类似以下的事情:

- (UITableViewCell *)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath)indexPath
{
    button.tag = indexPath.row;
    [button performSelector:@selector(clickedInfo:)];
    // or
    [button addTarget:self action:@selector(clickedInfo:) forControlEvents:UITouchUpInside];
}

- (void) clickedInfo:(id)sender
{
    int row = sender.tag;
    // Do stuff with the button and data
}
于 2013-05-30T19:46:16.483 回答
1

很多地方都解决了这个问题,但回答起来比把你指向那里更容易:

[someObject performSelector:@selector(clickedInfo:) withObject:someOtherObject];

someObject接收者在哪里,是someOtherObject传递给的参数clickedInfo

于 2013-05-30T19:53:23.427 回答