UITutton在UITableViewController中

时间:2009-10-28 18:59:20

标签: iphone objective-c uibutton uitableview

我在每个表格单元格中创建了UIButton。我想像这样挂钩触摸事件:

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

我想将有关当前行的数据(该行的对象的id)传递给startVote方法。有没有一种方法我缺少这样做,或者我打破了一些最佳实践。这似乎是一件很正常的事情吗?

2 个答案:

答案 0 :(得分: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添加一定数量,因此它不会与使用的“自动”标记冲突通过操作系统。

答案 1 :(得分:2)

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

  • 假设它是一个自定义单元格类,请在单元格实例上设置一个属性,以标识它显示的行以及稍后可以使用的按钮。
  • 如果您将单元格中的这些按钮作为附件视图,请查看表格委托的tableView:accessoryButtonTappedForRowWithIndexPath:方法。
  • 如果它是一个单节表,你可以做一些非常俗气的事情,比如将行索引存储在按钮的tag属性中。您的startVote:方法会通过按钮传递,然后可以提取其标记。