2013-11-03 3 views
2

У меня возникли проблемы с длинным жестом печати, настроенным на ячейки таблицы в приложении, над которым я работаю. Я пробовал три разных конфигурации, но еще не получил возможность работать.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

Ваш сценарий 2 должен работать. Какое место вы возвращаетесь для «точки»? Это изменится, если вы запишете его в UIGestureRecognizerStateEnded? – Joel

+0

@Joel Я бы так подумал, я обновил вопрос журналами из сценария 2, включая рассчитанную точку и проблему с IndexPath. Я также включил скриншот рассматриваемого вида. –

+0

Я добавил ваш код (сценарий 3) к обработчику действий для длинного распознавателя жестов нажатия (добавлен в каждую ячейку), и он работал нормально. Можете ли вы показать, как вы добавляете распознаватель жестов и полный метод обработчика? – rdelmar

ответ

2

Я делаю это ответ, потому что это решить мою проблему.

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

Добавление ссылки обратно в контроллер просмотра, так что self.tableView больше не был nil Я начал получать точные результаты.

Прошу прощения за то, что вы не смогли проверить простые вещи, подобные этому раньше, и будете помнить о них в будущем. Благодаря @Joel и @rdelmar за попытку привлечь меня на правильный путь, но, как вы сказали, каждый сценарий должен работать (и делает), пока все остальные настроены соответствующим образом.

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