我在UITableView的每个单元格中实现了一个UIButton,并为此按钮设置了一个动作。现在我想找出哪些按钮被点击了:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
<...>
UIButton *but=[UIButton buttonWithType:UIButtonTypeRoundedRect];
but.frame= CGRectMake(275, 5, 40, cell.frame.size.height-10);
[but setTitle:@"Map" forState:UIControlStateNormal];
[but addTarget:self action:@selector(Map:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:but];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
return cell;
}
- (IBAction) Map: (id) sender {
NSIndexPath *indexPath = [[NSIndexPath alloc] init];
indexPath = [tableView indexPathForCell:(UITableViewCell*)[[sender superview]superview]];
[delegate callMap: [[[data objectAtIndex:indexPath.section]
objectAtIndex:indexPath.row+1]
objectAtIndex:kNameInArray]
: [[[[data objectAtIndex:indexPath.section]
objectAtIndex:indexPath.row+1]
objectAtIndex:kXcoordinateInArray] doubleValue]
: [[[[data objectAtIndex:indexPath.section]
objectAtIndex:indexPath.row+1]
objectAtIndex:kYcoordinateInArray] doubleValue]
];
}
但它总是向委托发送data[0][1][*]
个元素。我的意思是indexPath
总是有0个原始和0个部分。我的错误在哪里?
答案 0 :(得分:2)
执行以下操作:
在if (cell == nil) { ... }
方法中添加按钮,否则在重复使用单元格时,同一单元格中会有很多按钮。
在返回单元格之前,设置cell.contentViow.tag = SomeValueIdentifyingYourData
(表示模型的某个int值...可能只是对象数组的索引..)。
在Map:
方法中,您可以使用((UIButton)sender).superview.tag
再次访问该值,并根据该值做出决定