2012-01-30 1 views
7

Я хочу, чтобы иметь возможность прокручивать влево или вправо в любом месте ячейки таблицы, чтобы стереть ячейку с анимацией, не показывая кнопку удаления. Как я могу это сделать?Проведите пальцем влево или вправо в любом месте UITableViewCell, чтобы удалить ячейку без кнопки удаления?

+0

если можете, укажите свой код? –

ответ

6

Я не пробовал и не реализовал это, но я сделаю это. Во-первых, создать пользовательские UITableViewCell, и пусть она имеет 2 свойства, которые можно использовать

  1. отсылка к Tableview она используется в.
  2. An indexPath найти ячейку в Tableview. (Примечание, это необходимо обновлять каждый раз, когда вы удаляете ячейку для всех ячеек, где это изменяется)

В вашем cellForRowAtIndexPath:, где вы создаете пользовательскую ячейку, задайте эти свойства. Кроме того, добавить UISwipeGestureRecognizer в клетку

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

Убедитесь, что жест получает только горизонтальное пойло.

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

В вашем 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

Apple, черт возьми, за не предоставление '(void) cancelPreviousPerformRequestsWithTarget: (id) aTarget селектор: (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 
    }  
} 

Else мор Информация и может пойти по этой ссылке enter link description here

+0

Vivek2012 и iWill - Спасибо за ответы, но я не хочу показывать кнопку DELETE, ответы на них уже есть в stackoverflow. Я хочу, чтобы ячейка была стерта с минуты, когда она получает салфетки влево или вправо.пожалуйста, прочитайте мое описание спасибо – carbonr

-1

реализации

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

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

эти два метода, если UITableViewCellEditingStyle является UITableViewCellEditingStyleDelete, то сделать что-н, чтобы стереть ячейку с

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

вот и все.

3

Решение, которое разместил @MadhavanRP работает, но он является более сложным, чем это должно быть. Вы можете использовать более простой подход и создать один распознаватель жестов, который обрабатывает все прокрутки, которые встречаются в таблице, а затем получить местоположение салфетки, чтобы определить, какая ячейка пользователь провела.

Для установки жест распознаватель:

- (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 должны реализовать жест распознавателя делегата ,