Получить Swipe для удаления в UITableView для работы с UIPanGestureRecognizer

У меня есть UIPanGuestureRecognizer, добавленный ко всему виду, используя этот код:

UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)]; [[self view] addGestureRecognizer:pgr]; 

В основном представлении у меня есть UITableView, который имеет этот код, чтобы включить функцию удаления ударов:

 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"RUNNING2"); return UITableViewCellEditingStyleDelete; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row >= _firstEditableCell && _firstEditableCell != -1) NSLog(@"RUNNING1"); return YES; else return NO; } 

В RUNNING1 только RUNNING1 и кнопка «Удалить» не отображается. Я считаю, что причиной этого является UIPanGestureRecognizer, но я не уверен. Если это правильно, как я должен это исправить. Если это неверно, укажите причину и устраните неисправность. Благодарю.

Из документа :

Если распознаватель жестов распознает его жест, остальные касания для вида отменены.

Ваш UIPanGestureRecognizer распознает жестом салфетки, поэтому ваш UITableView больше не получает штрихов.

Чтобы заставить представление таблицы получать касание одновременно с распознающим жестом, добавьте это в делегат распознавателя жестов:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 

Если вы используете UIPanGuestureRecognizer, например, чтобы показать боковое меню, вы можете увидеть некоторые нежелательные побочные эффекты, когда вы просто вернете ДА во всех случаях, как это предлагается в принятом ответе. Например, боковое меню открывается при прокрутке вверх / вниз по представлению таблицы (с дополнительным очень маленьким направлением влево / вправо) или кнопкой удаления, ведущей странно, когда вы открываете боковое меню. То, что вы можете сделать для предотвращения этих побочных эффектов, – это разрешить только одновременные горизонтальные жесты. Это заставит кнопку удаления работать правильно, но в то же время другие нежелательные жесты будут заблокированы при перемещении меню.

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *)otherGestureRecognizer; CGPoint velocity = [panGesture velocityInView:panGesture.view]; if (ABS(velocity.x) > ABS(velocity.y)) return YES; } return NO; } 

или в Свифт:

 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { guard let panRecognizer = otherGestureRecognizer as? UIPanGestureRecognizer else { return false } let velocity = panRecognizer.velocity(in: panRecognizer.view) if (abs(velocity.x) > abs(velocity.y)) { return true } return false } 
  • iOS увеличит зону касания для UIButton в TableViewCell
  • UITableView как приложение для Facebook
  • IPad создает программно UITableViewCell
  • Вложение NSDictionary на основе ценности
  • получить JSON / XML из Rails в iOS (xcode 4) в виде таблицы
  • Статический UITableView, создайте отдельную ячейку с динамической высотой в Swift
  • Дерево TableView с несколькими NSMutablearray
  • Соответствует UITableViewDelegate и UITableViewDatasource в Swift?
  • UITableView tableFooterView отображается в верхней части UITableView - неправильно
  • Как загрузить отображение ломаной карты google в ячейке tableview?
  • iPhone, почему не работает UITableView reloadData?
  • Давайте будем гением компьютера.