Я тоже чувствую, что это скорее всего ошибка. Тем не менее, я просто нашел идеальный обходной путь, основанный на следующих наблюдениях.
- Ячейка
highlighted
при касании и selected
при касании .
- И
-setHighlighted:animated:
, и -setSelected:animated:
подсвечивают ячейку в соответствии со стилем ее выделения, то есть включение одного из них, когда другое выключено, подсвечивает ячейку.
- Ячейка создается с выключенным
highlighted
(как правило, в противном случае для решения, приведенного ниже, просто необходим соответствующий твик, который легко выяснить в зависимости от вашей конкретной ситуации).
Учитывая вышеизложенное, просто создайте подкласс UITableViewCell и переопределите setHighlighted:animated:
без вызова реализации super
. Таким образом, все попытки включить highlighted
будут подавлены, и выделение будет происходить только при касании, а не при касании, что в точности соответствует ожидаемому при отключении «Показать выделение при касании».
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
// hack to get the effect of unchecking "Show Selection on Touch" option of UITableView in IB which has no effect
}
При обновлении ячейка имеет значение selected
, но не animated
. Если вы хотите анимацию, я обнаружил, что вызов метода делегата, как показано ниже, оживляет выбор.
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[_itemsTable selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
return indexPath;
}