1

我基本上有一个 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];
4

1 回答 1

1

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

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

如果您还没有在单元格类的其他自定义属性中访问此信息,您还需要创建一个属性来存储NSIndexPath您当前在表中表示的信息。当您最初创建或 deque 时,您将在方法UITableViewCell中设置这些属性。UITableViewDataSourcetableView:cellForRowAtIndexPath:UITableViewCell

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

在此deleteCellAtIndexPath:,您将做两件事。UITableView首先,通过删除要删除的单元格的数据对象来修改您的支持数据源。这可能是某种NSMutableArray.

删除支持数据后,调用 上的方法deleteRowsAtIndexPaths:withRowAnimation:UITableView将其NSIndexPath作为唯一的对象传递给NSArray. 然后应该删除您的单元格,并按照UITableViewRowAnimation参数指定的方式对其进行动画处理。有关这些方法的更多信息,请参阅UITableView文档

于 2012-12-06T09:19:49.267 回答