2

我有一个UIButton在每个表格单元格内创建的。我想像这样连接一个触摸事件:

[imageButton addTarget:self
                action:@selector(startVote:)
      forControlEvents:UIControlEventTouchUpInside];

我想将有关当前行的数据(该行的对象的 id)传递给 startVote 方法。是否有一种我缺少的方法来执行此操作,或者我是否违反了一些最佳实践。这似乎是一件很正常的事情?

4

2 回答 2

2

我假设您对NSArray传递给cellForRowAtIndexPath.

试试这个startVote

- (void)startVote:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSDictionary *myData = [myArray objectAtIndex:indexPath.row];
}

编辑:

如果由于某种原因未选择该行,您可以tag在创建时为每个按钮分配一个唯一的,然后:

- (void)startVote:(id)sender {
    int myTag = [(UIButton *)sender tag];
    NSDictionary *myData = [myArray objectAtIndex:myTag];
}

也许你会用它做某种操作,tag所以它可以用作索引(我添加了一定的数量,tag所以它不会与操作系统使用的“自动”标记冲突。

于 2009-10-28T19:13:21.873 回答
2

UITableViewCell开箱即用,它不知道它在表格中显示的行。请记住,其目的是在整个表格中重复使用相同的单元格实例来显示其数据。也就是说,您UITableViewController负责设置单元并将它们传递给系统(当然还有索引路径)。那时,您可以执行以下操作:

  • 假设它是一个自定义单元格类,请在单元格实例上设置一个属性以标识它正在显示的行以及您的按钮以后可以使用的行。
  • 如果您将这些按钮作为附属视图放在单元格中,请查看表格委托的tableView:accessoryButtonTappedForRowWithIndexPath:方法。
  • 如果它是一个单节表,你可以做一些非常俗气的事情,比如将行索引存储在按钮的tag属性中。您的startVote:方法被传递给按钮,然后可以提取其标签。
于 2009-10-28T19:47:58.123 回答