我在每个表格单元格中创建了UIButton
。我想像这样挂钩触摸事件:
[imageButton addTarget:self
action:@selector(startVote:)
forControlEvents:UIControlEventTouchUpInside];
我想将有关当前行的数据(该行的对象的id)传递给startVote方法。有没有一种方法我缺少这样做,或者我打破了一些最佳实践。这似乎是一件很正常的事情吗?
答案 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:
方法会通过按钮传递,然后可以提取其标记。