1

基本的に、パンジェスチャを使用してセルをスワイプすると表示されるカスタムの削除ボタンを備えたUITableViewCellクラスがあります。

このようなもの。_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弱い参照を独自のカスタム プロパティに保存するかUIViewControllerUITableView. このようにして、セルを削除するために呼び出すことができるメソッドをコントローラーで簡単に作成できます。

また、セル クラスの他のカスタム プロパティでこの情報にまだアクセスできない場合は、テーブルで現在表されているNSIndexPathを格納するプロパティを作成する必要があります。を最初に作成またはデキューするときに、メソッドUITableViewCellでこれらのプロパティを設定します。UITableViewDataSourcetableView:cellForRowAtIndexPath:UITableViewCell

deleteClickedメソッドではUIViewController、 のようなメソッドを呼び出して、削除が必要なセルdeleteCellAtIndexPath:の を渡すことができます。NSIndexPath

これで、 deleteCellAtIndexPath:2 つのことを行います。UITableViewまず、削除するセルのデータ オブジェクトを削除して、バッキング データ ソースを修正します。これはおそらくある種のNSMutableArray.

バッキング データを削除した後、 で メソッドdeleteRowsAtIndexPaths:withRowAnimation:を呼び出し、内の唯一のオブジェクトとしてUITableViewに渡します。次に、セルを削除し、パラメーターで指定されたとおりにアニメーション化する必要があります。これらのメソッドの詳細については、ドキュメントを参照してください。NSIndexPathNSArrayUITableViewRowAnimationUITableView

于 2012-12-06T09:19:49.267 に答える