Пользовательский UITableViewCell backgroundView и selectedBackgroundView - PullRequest
2 голосов
/ 16 февраля 2012

Я хочу стилизовать UITableView так, чтобы он выглядел, как если бы у него был стиль UITableViewStyleGrouped, но с некоторыми тонкими различиями (например, разные цвета и закругленные углы с более коротким радиусом). Строки имеют переменную высоту. Я хочу использовать этот собственный стиль для большинства контроллеров табличного представления в моем приложении. См. Примеры приложений Twitter, Groupon и GitHub Issues.

Как мне это сделать?

Я думаю о том, чтобы поступить, как UITableViewStyleGrouped. UITableViewStyleGrouped устанавливает backgroundView & selectedBackgroundView для обоих экземпляров UIGroupTableViewCellBackground (подкласс UIView). UIGroupTableViewCellBackground является делегатом своего уровня и реализует drawLayer:, чтобы установить содержимое его слоя равным CGImageRef.

  1. Я почти уверен, что Apple создает это CGImageRef в соответствии с Руководство по программированию в Quartz 2D: создание контекста растровой графики , в котором также предлагается использовать CGLayer вместо рисования в растровом изображении. графический контекст. Что лучше для этого приложения?

  2. Кроме того, первая ячейка табличного представления UITableViewStyleGrouped добавляет тень с закругленными углами к вершине, используя UIImageView (для него устанавливается изменяемый размер (по ширине) UIImage с полупрозрачным PNG-файл.) Почему он это делает? Разве это не медленная прокрутка? Почему бы просто не нарисовать это на CGImageRef для первой ячейки? Возможно, снижение производительности не было значительным, и было проще заставить камеру выглядеть правильно с изображением. Я сохранил ячейку CGImageRef на диск и открыл ее с помощью предварительного просмотра. У этого все еще есть закругленные углы. Этот наложенный вид просто добавляет верхнюю тень.

    Ниже приведен снимок экрана запуска инструмента Core Graphics Instruments на моем устройстве с выбранным «Color Blended Layers» для представления таблицы UITableViewStyleGrouped. Вы можете видеть, что тень сверху смешана. И, похоже, что в последней камере тоже происходит смешивание.

    enter image description here

    enter image description here

    С выбранной третьей ячейкой (без наложения). Выбор первой или последней ячейки действует так же, но не избавляет от уже смешанных наложенных видов.

    enter image description here

1 Ответ

0 голосов
/ 04 сентября 2013

Вы можете посчитать количество нарисованных строк и установить изображение в качестве фона для отдельной ячейки.

Что вам нужно сделать, это

cell.backgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_normal.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];
cell.selectedBackgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_pressed.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];

используйте этот метод для установки фонового изображения

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath  
{      

      &&&&


     if((indexPath.row)==0)  
         // set image upper corner image here

     else if (indexPath.row==1)  
        //set normal image here

     else if (indexPath.row==YourArray)
        // also set the lower corner round image in the last low, which can be calculated by comparing indexpath.row to the mutablearray/array

}

Вы также можете применить одно условие перед частью &&&, чтобы применить другое изображение, которое имеет верхний и нижний углы, округлые в случае array.count == 1

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