Пользовательский UITableViewCell с drawRect + нормальный синий выбор - PullRequest
1 голос
/ 31 мая 2011

У меня есть пользовательский UITableViewCell.Все рисование выполняется в методе drawRect: и никакие подпредставления не добавляются.Рисунок работает нормально, скорость прокрутки хорошая.Но проблема с выделенными клетками.Я хочу, чтобы выделение велось так, как обычно:

  • Цвет выделения синего градиента
  • Инвертированный цвет текста
  • Анимированное выделение

Мне не удалось достичь всех трех.

Первая попытка:
Установить selectionStyle = UITableViewCellSelectionStyleNone и выполнить выбор цвета в методе drawRect.С помощью этого метода я могу достичь первых двух вещей, но отмена происходит мгновенно.Таким образом, одна секунда выделена синим цветом, а следующая - отменена.Я не получаю хорошего затухания.

Вторая попытка:
selectionStyle = UITableViewCellSelectionStyleBlue При этом методе моя ячейка становится градиентно-синим при выборе.Текст у меня не виден.Затухание работает хорошо.

Третья попытка:
Установите selectionStyle = UITableViewCellSelectionStyleBlue, а также установите selectedBackgroundView в UIView, где я установил backgroundColor в прозрачный синий цвет.Здесь проблема в том, что selectedBackgroundView (несмотря на название) рисуется поверх моего обычного контента.Поэтому, если selectedBackgroundView не является прозрачным, я не вижу текст.И если он прозрачный, я могу видеть текст, но цвет выделения становится «блеклым» и выглядит неправильно.

Каков будет правильный способ достижения всех трех пунктов маркера?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

OK. Так что ответ на мой собственный вопрос ... Не делайте подкласс UITableViewCell для пользовательского рисования. Вместо этого создайте подкласс UIImageView или UIView.

В этом посте есть хорошее описание того, как это сделать:
http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

0 голосов
/ 31 мая 2011

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

Пример кода:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (touch.view isKindOfClass:[UIButton class]]) {
        //do something with that view, for example: 
        //change the color of the text in that view, 
        //or invert it ;)
        return YES;
    }
    return NO;
}

В качестве альтернативы, вы можете прикрепить UIGestureRecognizer к этой кнопке. Таким образом, вы получите вставленный класс с именем в селекторе.

Может быть, лучше сделать то, что вы просили. Это просто пришло мне в голову, если у вас уже есть 2/3 балла, это должно помочь вам получить 3/3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...