我在UITableViewCell中有一个按钮抽屉。如何获取单元格的indexPath并将其删除?

时间:2013-03-24 00:55:35

标签: iphone ios objective-c

我已经实现了这个按钮抽屉,我已经添加了一些按钮。也就是说,我不确定如何将抽屉中这些按钮的消息发送到相应的委托方法,以便从我的tableView中删除该项目。

如何获得正确的indexPath?我应该为那些已经切换了检查按钮的uitableviewcells创建一个新的NSIndex吗?

由于

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    HHPanningTableViewCell *cell = (HHPanningTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSInteger directionMask = indexPath.row % 5;
    if (cell == nil) {
        cell = [[HHPanningTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];




    UIView *drawerView = [[UIView alloc] initWithFrame:cell.frame];

    drawerView.backgroundColor = [UIColor grayColor];
    cell.drawerView = drawerView;
        UIImage *checkImage = [UIImage imageNamed:@"check.png"];
        UIButton *checkButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [checkButton setImage:checkImage forState:UIControlStateNormal];
        cell.frame = CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height);
        checkButton.frame = CGRectMake(10, 10, checkImage.size.width, checkImage.size.height);
        [drawerView addSubview:checkButton];

        [checkButton addTarget:nil action:@selector(onCheckMarkTap:) forControlEvents:UIControlEventTouchUpInside];

    }

- (void)onCheckMarkTap {
    NSLog(@"Delete the cell");

}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        }

}

3 个答案:

答案 0 :(得分:1)

这个问题已经has an answer。您可以使用带有事件的目标/动作或通过手势识别器获取在表视图的坐标系中点击的按钮的坐标,然后使用UITableView的方法-indexPathForRowAtPoint:来获取包含该按钮的单元格的indexPath点。

答案 1 :(得分:0)

cellForRowAtIndexPath:

checkButton.tag = indexPath.row

同样在onCheckMarkTap中,执行以下操作:

- (void)onCheckMarkTap : (id) sender
{
    if (sender.tag == 0)
    ///code
    else if (sender.tag == 1)
    ///code

}

答案 2 :(得分:-2)

我在自己的代码中处理这样的问题的方法是子类化“UIButton”,我将“NSIndexPath”或“tableRow”ivar添加到子类按钮中。我们的名字是“StangButton”。

使用子类按钮,您可以在通过“indexPath”撰写单元格时填充“cellForRowAtIndexPath:”ivar。

然后,当按下按钮时,您将知道按下了哪个按钮以及它在哪一行。

您还可以检查在单元格中触摸按钮时是否调用"tableView:didSelectRowAtIndexPath:"表视图委托方法。