2012-12-06 2 views
0

기본적으로 팬 제스처를 사용하여 셀을 스 와이프 할 때 나타나는 사용자 정의 삭제 버튼이있는 UITableViewCell 클래스가 있습니다.사용자 정의 삭제 버튼을 클릭하면 UITableViewCell이 삭제됩니다.

이와 비슷한 것. _delBtn이 내 삭제 버튼입니다. 클릭하면 TableCell이 삭제됩니다. 나를 당신의 deleteClicked 방법이

- (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]; 
+0

지정된 셀의 데이터 소스를 제거하고 [tableview deleteRowsAtIndexPaths : ....]를 호출하십시오. – doge

답변

0

에 도와주세요, 당신은 UITableView 셀을 삭제가 필요합니다. 셀에는 표에 표시된 행과 섹션에 대한 정보뿐만 아니라이를 포함하는 UITableView에 대한 참조가 있어야합니다.

UITableView 부모

self.superview 속성을 얻을 수 있지만, 더 나은 아직 약한 사용자 정의 속성 참조, 또는, UITableView 관리하는 UIViewController 클래스에 대한 참조를 저장하는 것이 안전 할 수있다. 이렇게하면 컨트롤러에서 셀을 삭제하기 위해 호출 할 수있는 메서드를 간단히 만들 수 있습니다.

UITableViewCell이 현재 테이블에서 나타내는 NSIndexPath을 저장하기위한 속성을 만들어야합니다 (셀 클래스의 다른 사용자 지정 속성에서이 정보에 대한 액세스 권한이없는 경우). UITableViewCell을 처음 만들거나 deque 할 때 UITableViewDataSource 메서드 tableView:cellForRowAtIndexPath:에서 이러한 속성을 설정합니다. 당신의 deleteClicked 방법에서

, 당신은 그것을 삭제 필요한 셀의 NSIndexPath 전달 deleteCellAtIndexPath:처럼, 당신의 UIViewController 뭔가를 메서드를 호출 할 수 있습니다.

deleteCellAtIndexPath:에는 두 가지 작업을 수행합니다. 먼저 삭제할 셀의 데이터 개체를 제거하여 UITableView의 백업 데이터 원본을 수정합니다. 이것은 NSMutableArray 일종의 가능성이 있습니다.

받침 데이터를 제거한 후 의 deleteRowsAtIndexPaths:withRowAnimation: 메서드를 호출하고 의 유일한 개체로 NSIndexPath을 전달합니다. 그러면 셀이 삭제되고 UITableViewRowAnimation 매개 변수로 지정된대로 애니메이션이 적용됩니다. 이러한 방법에 대한 자세한 내용은 UITableView documentation을 참조하십시오.

관련 문제