我有一个自定义UITableViewCell,它有几个按钮。当代码全部在一个视图控制器下时,我的按钮声明如下:
myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self
action:@selector(myButtonAction:)
forControlEvents:UIControlEventTouchUpInside];
[myButton setTitle:@"Action" forState:UIControlStateNormal];
myButton.frame = CGRectMake(20, 80, 72, 37);
[self addSubview:myButton];
昨晚我将UITableViewCell子类化,因此代码变为:
myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:viewController
action:@selector(myButtonAction:)
forControlEvents:UIControlEventTouchUpInside];
[myButton setTitle:@"Action" forState:UIControlStateNormal];
myButton.frame = CGRectMake(20, 80, 72, 37);
[self addSubview:damageButton];
但是,由于这样做,按下任何单元格上的按钮会导致操作仅影响表格中的第一行,我不确定原因。
行动代码:
UIButton *button = (UIButton *)sender;
UIView *contentView = [button superview];
UITableViewCell *cell = (UITableViewCell *)[contentView superview];
NSIndexPath *indexPath = [[self tableView] indexPathForCell:cell];
//do something with objectAtIndex:indexPath.row
我理解将tag属性设置为indexPath.row以在表视图中使用UIButton是很常见的。但是,我在数据源中使用两个单独的数组来填充TableView的两个不同部分,所以我认为这不会起作用。
答案 0 :(得分:6)
问题最终是我将子视图添加到单元格对象而不是单元格对象的内容视图。我将按钮代码更改为此并且已解决:
UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)[button superview];
NSIndexPath *indexPath = [[self tableView] indexPathForCell:cell];
答案 1 :(得分:-1)
不要继承UITableViewCell(或UITableView),它通常是不必要的,可能会导致问题。表格单元格有contentView
,这是定制的好地方。
推荐阅读:
http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
然后:
http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html