views:

1298

answers:

2

I would like to use a fixed image as the background in a simple grouped table view in my iPhone program. Unfortunately, no matter what I do, the background is always solid white. I have followed several supposed solutions on this site and others to no avail. Here is the relavant code in the viewDidLoad method of the table view controller class (note, this code uses a solid blue color rather than an image for simplicity's sake):

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];

I suspect that I am not positioning the backgroundView view in the right place. I have tried sendToBack:, bringToFront:, and others but I always just get a white background. Is it possible to do this from within the UITableViewController? Must I use Interface Builder?

A: 

I would simply set the backgroundColor property of the UITableView itself. You can use UIColor's +colorWithPatternImage: method to convert a UIImage into a UIColor (that will repeat across the entire view, if not big enough):

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

Simply add yourImage.png to your application bundle, size it appropriately, and you're all set.

Tim
That results in something extremely strange-looking.
Drew C
Seems to work only for spaces between cells. Table header, section headers, and space on either side of cells do not match the image.
Drew C
It will render the color according to the visible space available, so the image looks "glued" to the top or bottom rows of the table.
leolobato
+1  A: 

Use UITableView's subviews property to add your background there:

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

Also, your cell/header etc. will probably need to be set to transparent for your backgroundView to be visible.

Adam Woś
The `subviews` property returns an `NSArray`, which does not respond to the `-addSubview:` method.
Alex Reynolds
Good catch - fixed. You just need the `addSubview` method of a `UIView`.
Adam Woś