Поскольку я недавно прочитал этот пост, и он мне помог, я хотел опубликовать еще один ответ, чтобы объединить все ответы (для потомков).
Итак, на самом деле есть 5 разных ответов в зависимости от желаемой логики и / или результата:
1.Чтобы отключить выделение синим цветом без изменения какого-либо другого взаимодействия с ячейкой:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Я использую это, когда у меня есть UIButton - или некоторые другие элементы управления - размещенные в UITableViewCell, и я хочу, чтобы пользователь мог взаимодействовать с элементами управления, но не с самой ячейкой.
ПРИМЕЧАНИЕ : как отметил Тони Миллион выше, это НЕ мешает tableView:didSelectRowAtIndexPath:
. Я обхожу это с помощью простых «если» утверждений, чаще всего проверяя раздел и избегая действий для конкретного раздела.
Еще один способ, которым я подумала проверить на постукивание по ячейке:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// A case was selected, so push into the CaseDetailViewController
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
// Handle tap code here
}
}
2. Чтобы сделать это для всей таблицы, вы можете применить вышеупомянутое решение к каждой ячейке в таблице, но вы также можете сделать это:
[tableView setAllowsSelection:NO];
В моем тестировании это все еще позволяет интерактивным элементам управления в UITableViewCell
.
3. Чтобы сделать ячейку доступной только для чтения, вы можете просто сделать это:
[cell setUserInteractionEnabled:NO];
4. Сделать всю таблицу «только для чтения»
[tableView setUserInteractionEnabled:NO];
5. Чтобы на лету определить, следует ли выделять ячейку (которая согласно этот ответ неявно включает в себя выбор), вы можете реализовать следующий UITableViewDelegate
метод протокола:
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath