Bill
Bill

Reputation: 45418

How do I set a background image for a grouped table view?

I've seen some iPhone applications that use a custom image as the background for a grouped UITableView, instead of the standard gray lines.

How is this achieved?

Upvotes: 10

Views: 20009

Answers (6)

tbone
tbone

Reputation: 15473

Here's what worked for me (and fairly simple once I figured it out ;)

1) Add a view in your app delegate and make it a subview of the window:

UIView *bgView = [[UIView alloc]initWithFrame:window.frame];

 bgView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"screenBG.png"]];
 [window addSubview:bgView];
 [bgView release];

2) On each view controller .m file, under ViewDidLoad, set background color of that particular view to transparent (so the other bgView created above will show through):

self.view.backgroundColor = [UIColor clearColor];

And in my case, the view controller in step 2 was a tableviewcontroller. Looks great.

And BTW, doing the following in each view controller did NOT work well:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"screenBG.png"]];

So follow steps 1 and 2 above.

Hope this helps out, Tbone

Upvotes: 23

self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"SortByCategory_320x480.png"]];

self.tableView.separatorColor = [UIColor clearColor];

self.tableView.backgroundColor = [UIColor clearColor];

Hope this will help. It won't display hideous translucent background behind the cells especially in case of Grouped UITableView.

Upvotes: 2

John Johnson
John Johnson

Reputation: 99

Try this

- (void) viewDidLoad {
    [super viewDidLoad];

    self.tableView.backgroundColor = [UIColor clearColor];
    self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"wallpaper.png"]];
    self.tableView.opaque = NO;
}

Upvotes: 9

Camilo Sanchez
Camilo Sanchez

Reputation: 1515

the problem with colorWithPatternImage: is that you need to use "patterned" images, otherwise your image will be tiled randomly

this link has a simple solution, if you want all your views to have the same background

http://howtomakeiphoneapps.com/2009/03/how-to-add-a-nice-background-image-to-your-grouped-table-view/

Upvotes: 2

Garrett
Garrett

Reputation: 8070

You can use the +[UIColor colorWithPatternImage:(UIImage)] method like so:

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]];

Upvotes: 3

Shaggy Frog
Shaggy Frog

Reputation: 27601

In another project (developed using 2.2.1) I did this by setting my UITableView's background opacity to 0%, and then simply layering a UIImageView behind it using Interface Builder. This allowed me to have a fixed background regardless of the table state. You can also set the background of the UITableView to be an image instead, but then the background scrolls with the table. (I don't have the code handy at the moment, but I got the tip a while back on the Apple developer forums).

Note that this can cause some performance issues. Apple discourages using transparency whenever possible because the GPUs on the pre-3GS models aren't particularly beefy.

Upvotes: 3

Related Questions