单击自定义删除按钮删除UITableViewCell

时间:2012-12-06 06:24:32

标签: objective-c ios

我基本上有一个UITableViewCell类,当使用Pan Gesture滑动单元格时会出现一个自定义删除按钮。

像这样的东西。 _delBtn是我的删除按钮。单击它应该删除TableCell。 请帮帮我

- (void)handlePan:(UIPanGestureRecognizer *)recognizer
  {

   CGPoint translation = [recognizer translationInView:self];
   recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y);
   [recognizer setTranslation:CGPointMake(0, 0) inView:_baseView];

if (recognizer.state == UIGestureRecognizerStateEnded) 
{

    translation.y = 0;
    CGPoint velocity = [recognizer velocityInView:_baseView];
    CGFloat magnitude = sqrtf((velocity.x * velocity.x));
    CGFloat slideMult = magnitude / 1000;
    NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);

    float slideFactor = 0.1 * slideMult;

    velocity.x = velocity.x + 1000;
    velocity.y = 0;

    CGPoint finalPoint = CGPointMake(recognizer.view.center.x + (velocity.x * slideFactor),
                                     recognizer.view.center.y + (velocity.y * slideFactor));
    finalPoint.x = MIN(MAX(finalPoint.x, 0), _baseView.bounds.size.width);
    finalPoint.y = MIN(MAX(finalPoint.y, 0), _baseView.frame.size.height);

    [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{

        recognizer.view.center = finalPoint;

    } completion:nil];


    if (finalPoint.x >= 195) 
    {

        _delBtn = [[UIButton alloc] initWithFrame:CGRectMake(5, 10, 60, 60)];
        [_delBtn setImage:[UIImage imageNamed:@"delBtn3.jpg"] forState:UIControlStateNormal];
        [_delBtn addTarget:self action:@selector(deleteClicked) forControlEvents:UIControlEventTouchUpInside];
        _delBtn.hidden = NO;
        [_baseView insertSubview:_delBtn atIndex:0];
        _delBtn.alpha = 0;
        [UIView animateWithDuration:slideFactor delay:0.4 options:UIViewAnimationOptionCurveLinear animations:^{

            recognizer.view.center = finalPoint;

        } completion:nil];

1 个答案:

答案 0 :(得分:1)

deleteClicked方法中,您需要让UITableView删除该单元格。单元格需要引用包含它的UITableView以及它在表格中表示的行和部分的知识。

可以使用UITableView属性获取self.superview父级,但在您自己的自定义属性中存储弱引用可能更安全,或者更好的是,{{1}的引用管理UIViewController的类。这样,您只需在控制器中创建一个方法即可调用以删除单元格。

您还需要创建一个属性来存储您的UITableView当前在表中所代表的NSIndexPath,如果您还没有访问此类信息的其他自定义属性细胞类。最初创建或取消UITableViewCell时,您将在UITableViewDataSource方法tableView:cellForRowAtIndexPath:中设置这些属性。

UITableViewCell方法中,您可以在deleteClicked中调用该方法,例如UIViewController,并将其传递给需要删除的单元格的deleteCellAtIndexPath:

在这个NSIndexPath中你会做两件事。首先,通过删除要删除的单元格的数据对象来修改deleteCellAtIndexPath:的后备数据源。这可能是某种UITableView

删除支持数据后,调用NSMutableArray上的方法deleteRowsAtIndexPaths:withRowAnimation:,将UITableView作为NSIndexPath中的唯一对象传递给它。然后应删除您的单元格,并使用NSArray参数指定动画。有关这些方法的详细信息,请参阅UITableView documentation