Отменить выделение строки в виде таблицы

55
5

Я хочу обработать случай, когда пользователь отменяет выбор строки (которая уже выбрана), нажав на эту строку. Хорошо известно, что tableView:willDeselectRowAtIndexPath:/tableView:didDeselectRowAtIndexPath: методы делегирования в этом случае не вызываются: они tableView:didDeselectRowAtIndexPath: только в том случае, если вы нажимаете другую, еще не выделенную строку (мой режим таблицы имеет один режим выбора).

tableView:didSelectRowAtIndexPath: метод также не tableView:didSelectRowAtIndexPath: когда я не tableView:didSelectRowAtIndexPath: строку.

Есть ли какие-либо простые решения?

Обновить

Проблема была в tableView:willSelectRowAtIndexPath: метод, где я возвращаю nil в некоторых случаях, вот почему tableView:didSelectRowAtIndexPath: не вызывал. Спасибо @Nekto за полезную информацию и помощь.

спросил(а) 2016-07-19T20:17:00+03:00 3 года, 11 месяцев назад
1
Решение
79

Apple docs говорит следующее о - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Этот метод не вызывается, если для свойства редактирования таблицы установлено значение YES (то есть, представление таблицы находится в режиме редактирования).

Это означает, что этот метод следует вызывать, если у вашего кода не обнаружена ошибка, или вы не обновили delegate вашего представления таблицы, или таблица находится в режиме редактирования.

Одна из возможных проблем может быть, что вы неправильно реализованы - (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath и возвращают nil для выбранной строки. В этом случае didSelect... не вызывается:

Верните нуль, если вы не хотите, чтобы строка была отменена.

В качестве альтернативы вы можете реализовать другой метод делегата таблицы: - (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath:

Сообщает делегату, что подсветка была удалена из строки по указанному пути указателя.

Подробнее об управлении выборами в табличных представлениях читайте здесь.

ответил(а) 2016-07-20T14:01:00+03:00 3 года, 11 месяцев назад
55

Вы все равно можете использовать tableView:didSelectRowAtIndexPath, просто используйте его, как система проверки.


Ответ здесь объясняет, как использовать галочку. Вы можете использовать это или использовать здесь ответ.

ответил(а) 2016-07-19T20:34:00+03:00 3 года, 11 месяцев назад
56

У меня такой вариант использования. Почему вы не создаете переменную для lastSelectedRow (здесь у меня проблема, если она была NSIndexPath и я использовал два целых числа), а в методе выбора строки просто сравните currentSelectedRow с lastSelectedRow.

ответил(а) 2016-07-19T20:29:00+03:00 3 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема