проблема при отключении Показать выделение при касании UITableview? - PullRequest
7 голосов
/ 27 января 2010

Я использую IB и снимаю флажок «Показывать выбор при прикосновении», но он все равно показывает синюю подсветку на выбранной ячейке Это ошибка с яблоком или я что-то не так делаю.

Ответы [ 2 ]

19 голосов
/ 27 января 2010

Это, вероятно, ошибка в IB, как вы видите в Документации, что табличное представление не имеет какого-либо свойства для показа Selection на ощупь. Это скорее свойство таблицы tableview. Таким образом, флажок не должен присутствовать в IB. Вероятно, вы можете отправить сообщение об ошибке в Apple и посмотреть, что они говорят об этом.

Для получения эффекта вы должны сделать это так:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

            cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2];
                [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
            }
    }

Надеюсь, это поможет.

0 голосов
/ 08 апреля 2014

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

  • Ячейка 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...