2012-01-30 16 views

Odpowiedz

6

Nie próbowałem tego i zaimplementowałem, ale dam mu szansę. Najpierw utwórz niestandardowy UITableViewCell, i niech mają 2 właściwości, które można wykorzystać

  1. odniesienie do Tableview jest on używany w.
  2. An indexPath znaleźć komórkę w Tableview. (Uwaga, to musi być aktualizowane za każdym razem, gdy usuniesz komórkę dla wszystkich komórek, w których to się zmieni)

W swojej cellForRowAtIndexPath:, w której tworzysz komórkę niestandardową, ustaw te właściwości. Również dodać UISwipeGestureRecognizer do celi

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

upewnić, że gest odbiera tylko swipes poziomych.

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

W swojej 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

Nie zapominaj, że musisz ustawić kierunek rozpoznawania gestów podczas pierwszej inicjalizacji, aby dodać go do komórki. Coś takiego: swipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight; – ColossalChris

+0

Apple, do cholery, za niedostarczenie '(void) cancelPreviousPerformRequestsWithTarget: (id) aTarget selector: (SEL) aSelector'. –

-2

za to, że musisz dodać ten kod do swojego projektu.

// 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 
    }  
} 

Else mor informacji u może przejść przez ten link enter link description here

+0

Vivek2012 i iWill - dzięki za odpowiedzi, ale nie chcę pokazywać przycisku DELETE, istnieją już odpowiedzi na te w stackoverflow. Chcę, aby komórka została usunięta od momentu otrzymania gestu w lewo lub w prawo.przeczytaj mój opis dzięki – carbonr

-1

wdrożyć

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

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

tych dwóch metod, jeśli UITableViewCellEditingStyle jest UITableViewCellEditingStyleDelete, a następnie zrobić czegoś, aby usunąć komórki z

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

to wszystko.

3

Rozwiązanie zamieszczonych przez @MadhavanRP działa, ale jest to bardziej skomplikowane niż to musi być. Możesz przyjąć prostsze podejście i utworzyć jeden aparat rozpoznawania gestów, który obsługuje wszystkie przeciągnięcia, które występują w tabeli, a następnie uzyskać lokalizację przesunięcia palca, aby określić komórkę, którą użytkownik przeciągnął.

Aby skonfigurować rozpoznawania gest:

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

wywołać tę metodę w viewDidLoad

obsłużyć bezstykowa:

- (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? ... 
} 

UWAGA: Twój vc musi implementować delegata gest Rozpoznawania .

Powiązane problemy