单击自定义UIButton删除UITableView行

时间:2015-03-12 10:53:35

标签: ios objective-c uitableview

基本上我想删除作为该行一部分的按钮的点击事件的行 我不能使用提交编辑样式,因为我想使用相同的按钮执行取消订阅和删除 enter image description here

点击订阅按钮,我想删除该特定行 所以任何想法,我该怎么做。

7 个答案:

答案 0 :(得分:3)

它适用于以下代码

按钮点击事件

    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.table];
    NSIndexPath *indexPath = [self.table indexPathForRowAtPoint:buttonPosition];
    [self.arraylist removeObjectAtIndex:indexPath.row];
    [self.table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

答案 1 :(得分:2)

一个。将目标和回调添加到按钮(我猜你已经这样做了)

湾在回调函数中,遍历超级视图以找到UITableViewCell,然后找到它的索引,如下所示:

-(void)deleteButtonPressed:(UIButton*)button {
    UIView* candidate = button;
    while (![candidate isKindOfClass:[UITableViewCell class]]) {
        candidate = candidate.superview;
    }
    NSIndexPath* indexPathToDelete = [self.tableView indexPathForCell:cell];
    ...

℃。首先更新您的模型(非常重要)

[self.dataArrayThatFeedsTableView removeObjectAtIndex:indexPathToDelete.item]

d。调用删除行

[self.tableView deleteItemsAtIndexPaths:@[indexPathToDelete]];

答案 2 :(得分:1)

当您在cellForRowAtIndexPath中创建行时,将indexPath.row分配给按钮的标记,最好是添加一些数字以避免与其他人混淆,例如:

cell.deleteButton.tag = 100 + indexPath.row

单击按钮时,将发件人转到按钮,恢复按钮的标签(记得减去100),然后知道要删除哪一行。

答案 3 :(得分:0)

您可以获取单击按钮的位置以查找indexPath,然后从中找到具有该按钮的单元格:

var position: CGPoint =  sender.locationInView(self.tableView)
var indexPath: NSIndexPath = self.tableView.indexPathForRowAtPoint(position)!    
var cell = self.tableView(tableView, cellForRowAtIndexPath: indexPath)

答案 4 :(得分:0)

您应该获得已点按的按钮的indexPath。然后使用标准API调用删除选定的索引路径。像这样:

- (IBAction) didTapSubscribeButton:(UIButton*)sender {
     UIView* candidate = button;
     while (![candidate isKindOfClass:[UITableViewCell class]]) {
        candidate = candidate.superview;
    }
    NSIndexPath* indexPathToDelete = [self.tableView indexPathForCell:candidate];
     [self.dataSourceArray removeObjectAtIndex:indexPath.row] //Considering that this is a single data source table view.
     NSArray *indexPaths = [NSArray alloc]initWithObjects:@[indexPath],nil];
     [self.tableView beginUpdates];
     tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
     [self.tableView endUpdates];
   }

答案 5 :(得分:0)

使用像这样的自定义属性将UIButton的子类作为CellButton创建

@property (nonatomic,strong) NSIndexPath *indexPath;

将按钮的自定义类属性设置为新创建的属性,并在cellForRowAtIndexPath中设置

cell.btnSubscribe.indexPath=indexPath;
[cell.btnSubscribe addTarget:self action:@selector(subscribe:) forControlEvents:UIControlEventTouchUpInside];

现在在函数中

-(IBAction)subscribe:(id)sender{
    CellButton *button=(CellButton *)sender;
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:button.indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

尝试这个答案。我相信这会起作用

答案 6 :(得分:-1)

点击一行并删除它应该是这样的: 在didSelectRowAtIndexPath中,您可以实施以下内容:

[myArrayWithSubscriptions removeObjectAtIndex:indexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

如果您只想点击要删除的UIButton,请在UIButton的操作中使用此代码。

CGPoint point;
NSIndexPath *indexPath;
point = [sender.center locationInView:tableView];
indexPath = [tableView indexPathForRowAtPoint:point];
[myArrayWithSubscriptions removeObjectAtIndex:indexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

通过这种方式,您可以从具有UIButton的单元格中获取indexPath,并且应该能够继续删除它。 我在旅途中输入此内容,稍后会检查此代码是否存在任何拼写错误。