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

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

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

有帮助吗?

解决方案

我假设您有某种 NSArray ,其数据会传递给 cellForRowAtIndexPath 中的按钮。

startVote

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

编辑:

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

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

也许您会使用标签进行某种操作,因此它可以用作索引(我为每个标签添加一定数量所以它不会冲突使用操作系统使用的“自动”标记。

其他提示

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

  • 假设它是一个自定义单元格类,请在单元格实例上设置一个属性来标识它正在显示的行以及您的按钮稍后可以使用的行。
  • 如果您将这些按钮作为其附属视图放入单元格中,请查看表委托的 tableView:accessoryButtonTappedForRowWithIndexPath: 方法。
  • 如果它是单节表,您可以做一些非常俗气的事情,例如将行索引存储在按钮的 tag 财产。你的 startVote: 方法传递按钮,然后可以提取其标签。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top