No iOS 6 SDK, escrevi as seguintes linhas de código para exibir uma imagem dentro de um botão:
NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];
Mas agora com o Xcode 5 e o iOS 7 isso não funciona. O botão não contém a imagem. O botão está cheio de cor azul.
Respostas:
No iOS7, há um novo tipo de botão chamado UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // botão padrão do sistema
Verifique seu arquivo .xib e altere o tipo de botão para Personalizado
Para fazer isso programaticamente, adicione esta linha ao
viewDidLoad
:fonte
[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];
(com o tipo de botão definido como "Sistema" no IB).Parece que o iOS 7 está usando a imagem fornecida apenas como uma máscara Alpha para exibir a cor da tonalidade do botão. Alterar o tipo de botão para
UIButtonTypeCustom
fazer o truque para mim (obrigado user716216!). Definir a imagem como plano de fundo nem sempre funciona se você já tiver uma imagem de plano de fundo, como foi o meu caso.fonte
Swift 3, 4, 5:
fonte
Há uma boa chance de a imagem estar lá e você simplesmente não a poder ver. Tente alterar o tipo do botão para
UIButtonTypeCustom
. Se isso não funcionar, defina a cor de fundo do botão como[UIColor clearColor];
fonte
A questão é a TintColor. Por padrão, o iOS lança uma cor azul sobre cada botão. Você pode contornar isso de três maneiras.
Mude a cor da tonalidade.
[button setTintColor:[UIColor blackColor]];
Isso pode colorir sua imagem de maneiras que você não deseja.Como a maioria das outras sugestões, defina a imagem de fundo.
[button setBackgroundImage:[UIImage...]];
Adicione um UIImageView ao seu botão.
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
fonte
Para rápida:
fonte
Eu tive o mesmo problema. No meu storyboard, eu tinha um botão sem nenhuma imagem.
Eu atribuiria a imagem no código.
O iOS 7 chegou e eu recebi muitas imagens em azul.
A resolução foi simples, mas confusa. Se eu atribuir qualquer imagem no storyboard e depois alterá-la no tempo de execução, ela funciona bem.
Você sempre deve especificar uma imagem inicial no storyboard, mesmo que não a utilize.
fonte
Isso funcionou para mim
Nota: Remova a imagem frontal antes de fazer isso.
fonte
Tópico antigo, mas eu queria conversar porque tinha o mesmo problema. O problema era exatamente o que você estava chamando setImage quando deveria chamar setBackgroundImage.
fonte
Nenhuma das soluções fornecidas estava funcionando para mim. Se você não definir uma imagem inicial no Storyboard, ainda poderá alterar a imagem do botão usando
setBackgroundImage
.Para o seu exemplo, apenas uma pequena alteração é necessária.
fonte
Esse problema é chamado de problema de cor azul do botão no xcode. Quando criamos botão por código, o botão mostra a cor da tonalidade azul por padrão. Isso pode ser resolvido ao atribuir a cor da tonalidade a preto ou branco de acordo com a cor da célula. O código é:
fonte
Usando o Xcode 9.2, nenhuma das soluções acima funcionou para o que eu estava procurando.
Eu estava procurando uma solução que permitisse definir
.normal
e.selected
UIControlState
imagens dentro do storyboard para o modo de renderização original , mas, dentro do arquivo Swift, nenhuma literal de cadeia de caracteres deve existir em relação aos nomes das imagens.Basicamente, dentro do seu código, você obterá a imagem definida no storyboard para
.normal
estado e a renderizará novamente como.alwaysOriginal
(o mesmo para.selected
estado); depois, você definirá a imagem (que agora é renderizada como original e não será afetada por tonalidade) para o estado relevante (.normal
e.selected
) do seuUIButton
.Aqui está:
Dessa forma, você pode definir os estados da imagem do botão e, se o nome da imagem mudar, isso não afetará o seu código.
fonte
No iOS 13 - basta definir a propriedade Tint como Branco, mantendo o tipo do UIButton como Personalizado
fonte
fazer a cor da tonalidade como cor clara para todos os quatro estados (Padrão, Realçado, selecionado, desativado) funcionou para mim.
fonte
No Swift 4 , inicialize seu
UIButton
e atribua seus dados de imagem da seguinte maneira:fonte