Добавьте UIView за UITableView в коде UITableViewController - PullRequest
15 голосов
/ 17 января 2010

Я хотел бы использовать фиксированное изображение в качестве фона в простом сгруппированном табличном представлении в моей программе для 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 :, takeToFront: и другие, но я всегда просто получаю белый фон. Возможно ли сделать это изнутри UITableViewController? Должен ли я использовать Interface Builder?

Ответы [ 3 ]

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

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

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

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

14 голосов
/ 26 августа 2011

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

self.tableView.backgroundView = backgroundView;

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

3 голосов
/ 17 января 2010

Я бы просто установил свойство 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 и yourImage@2x.png к вашему комплекту приложений, измените его размер, и все готово.

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