2014-01-17 2 views
0

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

Вот где я делаю сот зарегистрировать левую салфетку жест влево:

UISwipeGestureRecognizer* swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeft:)]; 
    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 
    [cell addGestureRecognizer:swipeLeft]; 

А вот метод для выбора:

- (void)swipeLeft:(UIGestureRecognizer *)gestureRecognizer { 
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { 
     UITableViewCell *cell = (UITableViewCell *)gestureRecognizer.view; 
     NSIndexPath* indexPath = [self.tableView indexPathForCell:cell]; 

    } 
} 

Теперь она работает просто отлично, когда удаление ячеек из UITableview; однако мне нужна анимация, чтобы показать, что ячейка перемещается влево на определенное расстояние и затем удаляется. У меня нет кнопки удаления.

редактировать: Вот удаление строки с анимацией:

[self.tableView deleteRowsAtIndexPaths:@[indexPath] 
          withRowAnimation:UITableViewRowAnimationLeft]; 

    [self.tableView reloadData]; 

Это удаляет только штрафом, но я могу сделать так, что он создает как замирание анимацию или я могу изменить это так после того, как после считывания заданного расстояния зафиксирует удаление?

+0

вы хотите сделать что-то подобное, Что сделано в приложении почтового ящика для удаления почты? –

+0

Правильно, но вместо «Больше» и «Архив» я хочу, чтобы он просто автоматически удалялся, а не подтверждался, нажимая любую из этих кнопок. –

+1

Итак, когда пользователь случайно совершает движение, вы хотите удалить данные без каких-либо шансов на отмену? Не хорошая идея. Но если вы действительно хотите, чтобы не использовать стандартную комбинацию для удаления. Добавьте свой собственный салфетный жест в каждую ячейку. – rmaddy

ответ

1

Это пользовательский промах, который я сделал для статического представления таблицы, однако должен работать для динамического представления таблицы. Это позволит вам прокручивать до заданного max x postition. Если пользователь выпустит его, он будет возвращаться в исходное местоположение.

Я изменил код, чтобы он работал с динамической ячейкой. Но еще не проверено.

Добавить локальный вар

@property (nonatomic) CGFloat changeX; 

Просто подключите панорамирование GR раскадровку и подключить к этому действию.

- (IBAction)dragCell:(UIPanGestureRecognizer *) gestureRecognizer 
{ 
    CGPoint swipeLocation = [gestureRecognizer locationInView:self.tableView]; 
    NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation]; 
    UITableViewCell*swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath]; 

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { 
     self.changeX = swipeLocation.x; 
    } 
    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) { 
     CGFloat maxRight = 100; // change this to increase distance of hit point 
     CGFloat newX = swipeLocation.x - self.changeX; // relative from first touch location 
     if (newX <= 0) newX = 0; 
     if (newX >= maxRight) { 
      newX = maxRight; 
      NSLog(@"Hit the point where I'll allow delete"); 
     } 
     swipedCell.frame = CGRectMake(newX, swipedCell.frame.origin.y, swipedCell.frame.size.width, swipedCell.frame.size.height); 
    } 

    if (gestureRecognizer.state == UIGestureRecognizerStateEnded || gestureRecognizer.state == UIGestureRecognizerStateCancelled) { 

     [UIView animateWithDuration:0.5 animations:^{ 
      swipedCell.frame = CGRectMake(0, swipedCell.frame.origin.y, swipedCell.frame.size.width, swipedCell.frame.size.height); 
     } 
     completion:^(BOOL finished) { 
      // 
     }]; 
    } 
} 

enter image description here

+0

Awesomeness! У меня есть один вопрос о том, что такое self.changeX? –

+0

Хорошо, я вижу, что это CGFloat changeX (delta), чтобы создать разницу между ними для newX. Как ни странно, это работает очень хорошо! Браво! По какой-то причине он не удаляет ячейку, которую я перетаскиваю. Это нижняя часть стека, которую она удаляет, но это все на моем конце. Спасибо за помощь! –

0

Не вызывайте reloadData. Он убивает анимацию.

Смежные вопросы