У меня возникли проблемы с длинным жестом печати, настроенным на ячейки таблицы в приложении, над которым я работаю. Я пробовал три разных конфигурации, но еще не получил возможность работать.tableView: indexPath * всегда возвращает ноль IndexPath
Сценарий 1)
Я добавил UILongPressGestureRecognizer
в моем класс пользовательских UITableViewCell
и регулировал действие (показывающий лист действия) внутри действия, которое было частью пользовательского класса клеток. Это сработало, но ввело необходимость связать объект, который была передана ячейкой, а затем не предоставил мне возможности обновить источник данных таблиц (лист действий предназначен для удаления элементов), поэтому я оставил это, несмотря на то, что настройка UIActionSheet
работает нормально.
Сценарий 2)
Добавить UILongPressGestureRecognizer
в виде таблицы, но обрабатывать его действие контроллера, который содержит табличный (я использую универсальный UITableView
). В действии на жест распознаватель я попытался сделать:
if (sender.state == UIGestureRecognizerStateBegan) {
CGPoint point = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
if (indexPath == nil)
return;
// Fetch item from index path and show action sheet
}
Это был провал на тесте if (indexPath == nil)
.
Сценарий 3)
Я нашел пример добавления UILongPressGestureRecognizer
на каждой клетке, когда они созданы и сделали это в то же время используя тот же самый обработчик в контроллере, содержащего вид таблицы. Затем я изменил выше тест:
if (sender.state == UIGestureRecognizerStateBegan) {
NSIndexPath *indexPath = [self.tableView indexPathForCell:(MyCustomCell *)[sender view]];
if (indexPath == nil)
return;
// Fetch item from index path and show action sheet
}
Опять же, это постоянно неудачу в тесте if (indexPath == nil)
.
Есть ли что-то, что я должен сделать в представлении таблицы, чтобы получить путь к индексу, или я выполняю эти проверки не в том месте? Есть ли лучший способ добавления (предпочтительно невидимого) средства для подтверждения подтверждения удаления?
EDIT
Добавление дополнительной информации в ответ на @ комментарий Джоэла.
Вот мнение о котором идет речь, загруженное в тренажере: http://grab.by/rHTA
Для того, чтобы обеспечить некоторую визуальную информацию, выбранную строку в представлении (3-е от вершины) является одним я буду выступать длинный пресс жест для контекста следующих журналов.
2013-11-03 10:42:08.434 Application[35392:70b] Long press point = (143.000000, 168.000000)
2013-11-03 10:42:08.434 Application[35392:70b] IndexPath is nil
Как вы можете видеть в журнале "IndexPath is nil"
который печатается только если indexPath == nil
оценивается как истина, что табличное не возвращающий путь для индекса точки. Точка действительна внутри фрейма таблиц.
Это был выполнен с той же установкой, я перечислил для сценария 2.
Ваш сценарий 2 должен работать. Какое место вы возвращаетесь для «точки»? Это изменится, если вы запишете его в UIGestureRecognizerStateEnded? – Joel
@Joel Я бы так подумал, я обновил вопрос журналами из сценария 2, включая рассчитанную точку и проблему с IndexPath. Я также включил скриншот рассматриваемого вида. –
Я добавил ваш код (сценарий 3) к обработчику действий для длинного распознавателя жестов нажатия (добавлен в каждую ячейку), и он работал нормально. Можете ли вы показать, как вы добавляете распознаватель жестов и полный метод обработчика? – rdelmar