Я хотел бы обработать долгое нажатие на, UITableViewCell
чтобы напечатать «меню быстрого доступа». Кто-то уже сделал это?
Особенно этот жест распознавать UITableView
?
Я хотел бы обработать долгое нажатие на, UITableViewCell
чтобы напечатать «меню быстрого доступа». Кто-то уже сделал это?
Особенно этот жест распознавать UITableView
?
Сначала добавьте распознаватель жестов длинного нажатия в табличное представление:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //seconds
lpgr.delegate = self;
[self.myTableView addGestureRecognizer:lpgr];
[lpgr release];
Затем в обработчике жестов:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
CGPoint p = [gestureRecognizer locationInView:self.myTableView];
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:p];
if (indexPath == nil) {
NSLog(@"long press on table view but not on a row");
} else if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
NSLog(@"long press on table view at row %ld", indexPath.row);
} else {
NSLog(@"gestureRecognizer.state = %ld", gestureRecognizer.state);
}
}
Вы должны быть осторожны с этим, чтобы он не мешал обычному постукиванию пользователя по ячейке, а также обратите внимание, что он handleLongPress
может срабатывать несколько раз (это будет связано с изменениями состояния распознавателя жестов).
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) ...
.UITableView
, а не кUITableViewCell
...)Я использовал ответ Анны-Карениной, и он работает почти отлично с очень серьезной ошибкой.
Если вы используете разделы, длительное нажатие на заголовок раздела приведет к неверному результату нажатия на первую строку в этом разделе, я добавил ниже фиксированную версию (включая фильтрацию фиктивных вызовов на основе состояния жеста, в соответствии с Предложение Анны-Карениной).
источник
Ответ в Swift 5 (продолжение ответа Рики в Swift)
источник
Здесь разъясняются инструкции, объединяющие ответ Dawn Song и Marmor.
Перетащите длинное нажатие распознавателя жестов и поместите его в ячейку таблицы. Он прыгнет в конец списка слева.
Затем подключите распознаватель жестов так же, как подключите кнопку.
Добавьте код из Marmor в обработчик действий
}
источник
Похоже, более эффективно добавить распознаватель непосредственно в ячейку, как показано здесь:
Нажмите и удерживайте для ячеек TableView, тогда и сейчас
(выделите пример внизу)
источник
Ответ в Swift:
Добавить делегата
UIGestureRecognizerDelegate
к вашему UITableViewController.Внутри UITableViewController:
И функция:
источник
Я собрал небольшую категорию на UITableView, основанную на превосходном ответе Анны Карениной.
Таким образом, у вас будет удобный метод делегата, к которому вы привыкли при работе с обычными табличными представлениями. Проверьте это:
Если вы хотите использовать это в UITableViewController, вам, вероятно, нужно создать подкласс и соответствовать новому протоколу.
Это прекрасно работает для меня, надеюсь, это поможет другим!
источник
Ответ Swift 3, использующий современный синтаксис, включающий другие ответы и исключающий ненужный код.
источник
Просто добавьте UILongPressGestureRecognizer в указанную ячейку прототипа в раскадровке, затем перетащите жест в файл .m viewController, чтобы создать метод действия. Я сделал это, как я сказал.
источник
Используйте свойство метки времени UITouch в touchesBegan, чтобы запустить таймер или остановить его при срабатывании touchesEnded.
источник