Добавить UIView за UITableView в коде UITableViewController

Я хотел бы использовать фиксированное изображение в качестве фона в простой сгруппированной таблице в моей программе для iPhone. К сожалению, что бы я ни делал, фон всегда сплошной белый. Я следил за несколькими предполагаемыми решениями на этом сайте и другими безрезультатно. Вот соответствующий код в методе viewDidLoad класса контроллера табличного представления (обратите внимание, для простоты в этом коде используется сплошной синий цвет, а не изображение):

self.tableView.opaque = NO;
self.tableView.backgroundColor = [UIColor clearColor];
UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
backgroundView.backgroundColor = [UIColor blueColor];
[self.tableView.window addSubview:backgroundView];
[backgroundView release];

Я подозреваю, что я размещаю представление backgroundView в неправильном месте. Я пробовал sendToBack :, giveToFront: и другие, но всегда получаю только белый фон. Можно ли сделать это из UITableViewController? Я должен использовать Interface Builder?


person Drew C    schedule 16.01.2010    source источник


Ответы (3)


Используйте свойство UITableView subviews, чтобы добавить туда свой фон:

[self.tableView addSubview:backgroundView];
[self.tableView sendSubviewToBack:backgroundView];

Кроме того, ваша ячейка / заголовок и т. Д., Вероятно, должны быть прозрачными, чтобы ваш backgroundView был видимым.

person Adam Woś    schedule 17.01.2010
comment
Свойство subviews возвращает NSArray, который не отвечает на метод -addSubview:. - person Alex Reynolds; 17.01.2010
comment
Хороший улов - исправлено. Вам просто нужен addSubview метод UIView. - person Adam Woś; 17.01.2010

Начиная с iOS 3.2, UITableView имеет свойство backgroundView. Поэтому вместо добавления каких-либо подвидов просто сделайте следующее:

self.tableView.backgroundView = backgroundView;

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

person EFC    schedule 26.08.2011
comment
Установка backgroundColor с использованием изображения вызывает проблемы во внешних областях каждой строки ячеек. Это прекрасно работает. - person nh32rg; 07.07.2012
comment
Для меня в iOS7 / 8, если я устанавливаю backgroundView, он покрывает ячейки. - person Chris Harrison; 13.02.2015

Я бы просто установил свойство backgroundColor самого UITableView. Вы можете использовать метод +colorWithPatternImage: UIColor для преобразования UIImage в UIColor (который будет повторяться во всем представлении, если он недостаточно велик):

// From within UITableViewController's -viewDidLoad:
UIImage *image = [UIImage imageNamed:"yourImage.png"];
self.tableView.backgroundColor = [UIColor colorWithPatternImage:image];

Просто добавьте yourImage.png и [email protected] в пакет приложений, установите соответствующий размер, и все готово.

person Tim    schedule 16.01.2010
comment
В результате получается что-то очень странное. - person Drew C; 17.01.2010
comment
Кажется, работает только для пробелов между ячейками. Заголовок таблицы, заголовки разделов и пространство по обе стороны от ячеек не соответствуют изображению. - person Drew C; 17.01.2010
comment
Цвет будет отображаться в соответствии с доступным видимым пространством, поэтому изображение будет выглядеть приклеенным к верхним или нижним рядам таблицы. - person leolobato; 12.03.2010
comment
Да, это больше не работает в iOS 5.x. Он добавляет цвет только ячейкам, а при прокрутке цвет исчезает. - person Alex Zavatone; 22.10.2012