2012-01-30 1 views

답변

6

저는 이것을 시도하지는 않았지만 구현해 보았습니다. 첫째, 사용자 지정있는 UITableViewCell을 만들고, 당신이 그것에서 사용하고있는있는 tableView에

  1. 에 대한 참조를 사용할 수있는 2 곳을 보자.
  2. indexPath을있는 tableView의 셀을 찾을 수 있습니다. (참고, 이 변경되는 모든 셀의 셀을 삭제할 때마다 업데이트해야합니다.)

cellForRowAtIndexPath:에서 사용자 지정 셀을 만드는 위치에서 이러한 속성을 설정합니다. 또한 셀에 UISwipeGestureRecognizer를 추가하십시오.

cell.tableView=tableView; 
cell.indexPath=indexPath; 
UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(deleteCell:)]; 
[cell addGestureRecognizer:swipeGestureRecognizer]; 
[swipeGestureRecognizer release]; 

제스처는 수평 스 와이프 만 수신해야합니다. @MadhavanRP에 의해 게시하여 deleteCell:

-(void) deleteCell:(UIGestureRecognizer*)gestureRec 
{ 
    UIGestureRecognizer *swipeGestureRecognizer=(UISwipeGestureRecognizer*)gestureRec; 
    CustomCell *cell=[swipeGestureRecognizer view]; 
    UITableView *tableView=cell.tableView; 
    NSIndexPath *indexPath=cell.indexPath; 
    //you can now use these two to perform delete operation 
} 
+0

제스처 인식기의 방향을 처음 초기화 할 때 방향을 설정하여 셀에 추가해야한다는 점을 잊지 마십시오. 이런 식으로 : swipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight; – ColossalChris

+0

애플,'(void) cancelPreviousPerformRequestsWithTarget : (id) aTarget selector : (SEL) aSelector'를 제공하지 않으 셨습니다. –

-2

귀하의 프로젝트에이 코드를 추가해야합니다.

// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Return YES if you want the specified item to be editable. 
    return YES; 
} 

// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     //add code here for when you hit delete 
    }  
} 

그렇지 MOR 정보 유 enter link description here

+0

Vivek2012 및 iWill - 답장을 보내 주셔서 감사합니다. 그러나 DELETE 버튼을 표시하고 싶지는 않습니다. 이미 stackoverflow에있는 답변이 있습니다. 슬쩍 왼쪽 또는 오른쪽 제스처를받는 순간 셀을 지우고 싶습니다.내 설명을 읽어 주셔서 감사합니다 – carbonr

-1

하여 셀을 삭제 STH를 UITableViewCellEditingStyle가 UITableViewCellEditingStyleDelete 인 경우,

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath; 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath; 

이 두 가지 방법을 시행하고이 링크를 통해 이동할 수 있습니다

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; 

그게 전부입니다.

3

솔루션에서

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if([[gestureRecognizer view] isKindOfClass:[UITableViewCell class]]&& 
     ((UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionLeft 
     ||(UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight)) return YES; 
} 

작동하지만은 필요 이상으로 더 복잡하다. 보다 간단한 방법을 사용하여 테이블에서 발생하는 모든 스 와이프를 처리하는 제스처 인식기를 만든 다음 스 와이프 위치를 가져 와서 사용자가 스 와이프 한 셀을 확인할 수 있습니다. 설정하려면

제스처 인식기 :

- (void)setUpLeftSwipe { 
    UISwipeGestureRecognizer *recognizer; 
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self 
                 action:@selector(swipeLeft:)]; 
    [recognizer setDirection:UISwipeGestureRecognizerDirectionLeft]; 
    [self.tableView addGestureRecognizer:recognizer]; 
    recognizer.delegate = self; 
} 

전화 슬쩍 처리 할 수 ​​viewDidLoad

에서이 방법

- (void)swipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer { 
    CGPoint location = [gestureRecognizer locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; 
    ... do something with cell now that i have the indexpath, maybe save the world? ... 
} 

참고 : 당신의 VC는 제스처 인식기 대리자를 구현해야합니다 .

관련 문제