Suponho que você está falando sobre um UIButton com UIButtonTypeRoundedRect
? Você não pode mudar a cor de fundo disso. Quando você tenta mudar a cor de fundo, está mudando a cor do retângulo no qual o botão é desenhado (que geralmente é claro). Portanto, há dois caminhos a percorrer. Ou você cria uma subclasse de UIButton e sobrescreve seu -drawRect:
método, ou cria imagens para os diferentes estados do botão (o que é perfeitamente adequado ).
Se você definir as imagens de fundo no Interface Builder, deverá notar que o IB não oferece suporte à configuração de imagens para todos os estados que o botão pode ter, portanto, recomendo definir as imagens no código assim:
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"disabled.png"] forState:UIControlStateDisabled];
[myButton setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected];
[myButton setBackgroundImage:[UIImage imageNamed:@"higligted.png"] forState:UIControlStateHighlighted];
[myButton setBackgroundImage:[UIImage imageNamed:@"highlighted+selected.png"] forState:(UIControlStateHighlighted | UIControlStateSelected)];
A última linha mostra como definir uma imagem para o estado selecionado e destacado (aquele que o IB não pode definir). Você não precisa das imagens selecionadas (linhas 4 e 6) se seu botão não precisa de um estado selecionado.