Este me deixou perplexo.
É possível mudar a cor de fundo de um UIButton no Cocoa para iPhone. Tentei definir a cor de fundo, mas só muda os cantos. setBackgroundColor:
parece ser o único método disponível para tais coisas.
[random setBackgroundColor:[UIColor blueColor]];
[random.titleLabel setBackgroundColor:[UIColor blueColor]];
Respostas:
Isso pode ser feito programaticamente, criando uma réplica:
editar: é claro, você teria que
#import <QuartzCore/QuartzCore.h>
editar: para todos os novos leitores, você também deve considerar algumas opções adicionadas como "outra possibilidade". para sua consideração.
Como esta é uma resposta antiga, recomendo fortemente a leitura dos comentários para solução de problemas
fonte
Eu tenho uma abordagem diferente,
Do CommonUIUtility,
Não se esqueça de
#import <QuartzCore/QuartzCore.h>
fonte
btFind.layer.borderWidth = 1;
setBackgroundColor:(UIColor *) forState:(UIControlState)
.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:
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.
fonte
CGContextSetFillColorWithColor
eCGContextFillPath
para preencher o caminho desenhado porCGContextAddArcToPoint
.forState:(UIControlStateHighlighted | UIControlStateSelected)
Cheers.Outra possibilidade:
No entanto, o botão é quadrado e não é isso que queremos. Crie um IBOutlet com uma referência a este botão e adicione o seguinte ao método viewDidLoad:
Não se esqueça de importar QuartzCore.h
fonte
Subclasse UIButton e substitua os métodos setHighlighted e setSelected
Meu método darkerShade está em uma categoria UIColor como esta
fonte
Se você não quiser usar imagens e quiser que elas fiquem exatamente como o estilo de retângulo arredondado, tente isto. Basta colocar um UIView sobre o UIButton, com um quadro idêntico e máscara de redimensionamento automático, definir o alfa para 0,3 e definir o fundo para uma cor. Em seguida, use o trecho abaixo para cortar as bordas arredondadas da visualização de sobreposição colorida. Além disso, desmarque a caixa de seleção 'Interação do usuário habilitada' no IB no UIView para permitir que os eventos de toque sejam transmitidos em cascata para o UIButton abaixo.
Um efeito colateral é que seu texto também ficará colorido.
fonte
Outra possibilidade (o melhor e mais belo imho):
Crie um UISegmentedControl com 2 segmentos na cor de fundo necessária no Interface Builder. Defina o tipo como 'bar'. Em seguida, mude para ter apenas um segmento. O construtor de interface não aceita um segmento, então você deve fazer isso programaticamente.
Portanto, crie um IBOutlet para este botão e adicione-o ao viewDidLoad de sua visualização:
Agora você tem um lindo botão colorido e brilhante com a cor de fundo especificada. Para ações, use o evento 'valor alterado'.
(Eu encontrei isso em http://chris-software.com/index.php/2009/05/13/creating-a-nice-glass-buttons/ ). Obrigado Chris!
fonte
Bem, tenho 99% de certeza de que você não pode simplesmente mudar a cor de fundo de um UIButton. Em vez disso, você mesmo tem que mudar as imagens de fundo, o que eu acho uma dor. Estou surpreso por ter que fazer isso.
Se eu estiver errado ou se houver uma maneira melhor sem ter que definir imagens de fundo, por favor me avise
fonte
Por sugestão de @EthanB e de @karim fazendo um retângulo preenchido, acabei de criar uma categoria para o UIButton conseguir isso.
Basta inserir o código da categoria: https://github.com/zmonteca/UIButton-PLColor
Uso:
ForStates opcional para usar:
fonte
Você também pode adicionar uma CALayer ao botão - você pode fazer muitas coisas com eles, incluindo uma sobreposição de cor, este exemplo usa uma camada de cor simples, você também pode graduar a cor facilmente. Esteja ciente de que as camadas adicionadas obscurecem as que estão embaixo
fonte
adicione um segundo alvo
UIButton
paraUIControlEventTouched
e mude aUIButton
cor de fundo. Em seguida, mude de volta para oUIControlEventTouchUpInside
alvo;fonte
Para botões profissionais e bonitos, você pode verificar este componente de botão personalizado . Você pode usá-lo diretamente em suas visualizações e tableviews ou modificar o código-fonte para fazê-lo atender às suas necessidades. Espero que isto ajude.
fonte
Isso não é tão elegante quanto subclassificar UIButton, no entanto, se você quiser algo rápido - o que fiz foi criar um botão personalizado, uma imagem de 1 x 1 pixel com a cor que eu gostaria que o botão tivesse e definir o plano de fundo do botão para aquela imagem para o estado destacado - funciona para minhas necessidades.
fonte
Eu sei que isso foi perguntado há muito tempo e agora há um novo UIButtonTypeSystem. Mas as perguntas mais recentes estão sendo marcadas como duplicatas desta pergunta, então aqui está minha resposta mais recente no contexto de um botão do sistema iOS 7, use a
.tintColor
propriedade.fonte
[myButton setBackgroundColor:[UIColor blueColor]]; [myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
É possível mudar desta forma ou ir no Storyboard e mudar o fundo nas opções do lado direito.
fonte
Swift 3:
fonte