Установить цвет фона UITableViewCell при просмотре таблицы в простом стиле? - PullRequest
0 голосов
/ 12 июня 2009

Я создаю табличное представление в простом стиле с помощью панели поиска, и у меня возникают проблемы с воспроизведением вида «водосточного желоба» (когда табличное представление перетаскивается) в табличных представлениях Apple.

Скриншот контактов http://img200.imageshack.us/img200/2633/picture5m.png

Если я установлю цвет фона табличного представления, желоб будет выглядеть нормально, но мои клетки используют этот цвет в качестве цвета фона.

Я попытался установить цвет фона ячейки и ее содержимого в tableView:cellForRowAtIndexPath:, но в какой-то момент он переопределяется. Я также попытался создать пустое представление и установить его в качестве backgroundView ячейки и как подпредставление contentView, но только края окрашены в белый цвет.

Есть два решения, о которых я могу подумать:

  • Преобразуйте мой подкласс UITableViewController в UIViewController и вставьте пустое представление позади табличного представления.
  • Создание подкласса UITableViewCell, который не позволяет переопределять backgroundColor.

Оба эти решения потребуют немало усилий. Есть ли более простой способ?

ОБНОВЛЕНИЕ : первое решение не сработало. Я должен установить цвет фона табличного представления в clearColor для того, чтобы желоб изменился на цвет представления. Однако, когда я делаю это, я получаю тот же результат, что и установка backgroundColor для табличного представления.

Ответы [ 4 ]

10 голосов
/ 16 июня 2009

Существует метод делегата под названием -tableView:willDisplayCell:forRowAtIndexPath: , который можно использовать для настройки цвета фона ячейки после внесения изменений в представление таблицы. Из ссылки UITableViewDelegate :

Табличное представление отправляет это сообщение своему делегату непосредственно перед тем, как оно использует ячейку для рисования строки, что позволяет делегату настроить объект ячейки перед его отображением. Этот метод дает делегату возможность переопределить основанные на состоянии свойства, установленные ранее табличным представлением, такие как выделение и цвет фона. После возврата делегата табличное представление устанавливает только свойства альфа-канала и фрейма, а затем только при анимации строк по мере их скольжения.

Кроме того, так как цвет фона выглядывает из нижней части таблицы при попытке прокрутить мимо последней ячейки, мне пришлось создать нижний колонтитул и обновить содержимое содержимого табличного представления:

UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
footerView.backgroundColor = [UIColor whiteColor];
self.tableView.tableFooterView = footerView;
[footerView release];

UIEdgeInsets inset = self.tableView.contentInset;
inset.bottom = 44 - footerView.frame.size.height;
self.tableView.contentInset = inset;
0 голосов
/ 30 сентября 2011
UIView *myView = [[UIView alloc] initWithFrame:cell.frame];
myView.backgroundColor = [UIColor colorWithRed:214.00/255.00 green:233.00/255.00 blue:247.00/255.00 alpha:1.0];
cell.backgroundView = myView;
[myView release];
0 голосов
/ 13 июня 2009

Просто вставьте в таблицу и панель поиска внутри UIView (сделайте UITableViewController UIViewController) и установите цвет фона для представления в IB или в коде.

0 голосов
/ 13 июня 2009

Обычно я использую несколько контроллеров представления, когда я отображаю представления таблицы. Я использую подкласс UIViewController для управления целым представлением и любыми панелями или кнопками (все, что не связано с представлением таблицы). Затем я создаю UITableViewController для управления только таблицей.

Это имеет несколько эффектов:

Во-первых, это позволяет мне лучше инкапсулировать поведение. UITableViewController намного чище и портативнее.

Во-вторых, вы получаете настоящий UIView для решения таких проблем, как ваша проблема. Похоже, больше работы, но позволяет большую настройку. Вы можете делать все что угодно для фона.

В-третьих, это позволяет мне намного проще использовать XIB для основного вида, не беспокоясь о содержимом UITableView (которое может загружаться по сети или нет, или иметь другие проблемы с загрузкой).

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

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