Let’s look at this picture:

The left arrow shows that the button background have changed in Interface Builder, yet it’s still white on the simulator (and iPhone).
The right arrow shows that I have changed the background image.
So how come the background image doesn’t change?
Also what is the background parameter on that interface builder anyway? The reason I ask is when you programatically set the background image you need to specify the state.
Hint: the image is too big but you can use ctrl + in firefox to zoom in 😀
Note: I added:
UIImage * imgFilterBar = [UIImage imageNamed:@"filter-bar.png"];
[self.ChangeFilter setBackgroundImage:imgFilterBar forState:UIControlStateNormal|UIControlStateHighlighted];
in viewDidLoad
and it still doesn’t work.
I got this warning:
2012-10-10 18:29:59.929 BadgerNew[29833:c07] Could not load the “filter-bar.png” image referenced from a nib in the bundle with identifier
What does it mean? Am I doing [UIImage imageNamed:@”filter-bar.png”]; correctly? The file is in my project.

The answer by Kendall in Could not load the image referenced from a nib in the bundle running on device brought me enligthenment.
The issue is I use reference folder (the blue folder). If I do that I need to mention the folder name, which is a mess.
So I just copy the whole thing to resources. Problem solved.