UITutViewCells中UIButtons的操作

时间:2011-11-03 11:14:14

标签: ios uitableview

我在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个部分。我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

执行以下操作: 在if (cell == nil) { ... }方法中添加按钮,否则在重复使用单元格时,同一单元格中会有很多按钮。
在返回单元格之前,设置cell.contentViow.tag = SomeValueIdentifyingYourData(表示模型的某个int值...可能只是对象数组的索引..)。
Map:方法中,您可以使用((UIButton)sender).superview.tag再次访问该值,并根据该值做出决定