Eu vejo respostas muito complicadas, todas usando código. No entanto, se você estiver usando o Interface Builder , existe uma maneira muito fácil de fazer isso:
Selecione o botão e defina um título e uma imagem. Observe que, se você definir o plano de fundo em vez da imagem, a imagem será redimensionada se for menor que o botão.
Defina a posição dos dois itens alterando a aresta e as inserções. Você pode até controlar o alinhamento de ambos na seção Controle.
Você pode até usar a mesma abordagem por código, sem criar UILabels e UIImages dentro das outras soluções propostas. Mantenha-o sempre simples!
EDIT: anexado um pequeno exemplo com as 3 coisas definidas (título, imagem e plano de fundo) com inserções corretas
Isto está certo. Você desejará usar as inserções de borda no título e na imagem para alinhar os dois corretamente. Você pode fazer isso no código, definindo as propriedades titleEdgeInsets e contentEdgeInsets.
Tim Mahoney
4
sim, está quase correto. você só precisa definir a Backgroundimagem em vez de Image, caso contrário você não verá o título nem definirá os valores inseridos para reposicionar o título.
holex
6
Eu também tive problemas com isso. Se o seu título não estiver aparecendo, tente definir um deslocamento esquerdo negativo para ele. Parece que o IB empurra-o automaticamente para a direita da imagem.
Brian
8
Isso mostra apenas a imagem e o texto lado a lado, certo? Existe uma maneira de alterar a orientação de cima para baixo? Isso é o que a pergunta original afirma e o que estou procurando também. Obrigado!
flohei
12
Para aqueles que usam o Xcode 8, talvez você não veja a propriedade Edge. O texto pode desaparecer depois de adicionar uma imagem também. Ele muda o texto para branco e, se você estiver em um fundo branco, parece que desapareceu. Mude a cor do texto e ele aparecerá próximo à imagem. Você pode ajustar as inserções no Inspetor de tamanho.
Micah Montoya
67
Acho que você está procurando esta solução para o seu problema:
UIButton*_button =[UIButton buttonWithType:UIButtonTypeCustom];[_button setFrame:CGRectMake(0.f,0.f,128.f,128.f)];// SET the values for your wishes[_button setCenter:CGPointMake(128.f,128.f)];// SET the values for your wishes[_button setClipsToBounds:false];[_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal];// SET the image name for your wishes[_button setTitle:@"Button" forState:UIControlStateNormal];[_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]];[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];// SET the colour for your wishes[_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];// SET the colour for your wishes[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f,0.f,-110.f,0.f)];// SET the values for your wishes[_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];// you can ADD the action to the button as well like
... o restante da personalização do botão é seu dever agora e não se esqueça de adicionar o botão à sua visualização.
ATUALIZAÇÃO # 1 e ATUALIZAÇÃO # 2
ou, se você não precisar de um botão dinâmico, poderá adicioná-lo à sua exibição no Interface Builder e também poderá definir os mesmos valores. é bem parecido, mas aqui está essa versão também em uma imagem simples.
você também pode ver o resultado final no Interface Builder, como está na captura de tela.
O EdgeInsets funciona apenas quando você tem "definir imagem do botão" e quando você define a imagem do botão, não pode ver o título. E se você definir a imagem de plano de fundo, o EdgeInsets não poderá se aplicar à imagem. e você pode ver o título. Portanto, você não pode definir edgeinsect para ambos ao mesmo tempo.
Badal Shah
@BadalShah, sim, existem alguns cenários (dependendo do tamanho do botão, tamanho da imagem, comprimento do título, etc ...) quando o que você disse é verdadeiro e você não pode ver o título e a imagem ao mesmo tempo porque a imagem empurra o título da área visível; mas esse cenário não é genérico, a situação genérica é que título e imagem podem e aparecerão ao mesmo tempo.
holex
32
O Xcode-9 e o Xcode-10 da Apple fizeram algumas alterações em relação ao Edge Inset agora, você pode alterá-lo no inspetor de tamanho.
Siga os passos abaixo:
Etapa 1:
insira o texto e selecione a imagem que deseja mostrar:
Etapa 2:
selecione o controle de botão conforme sua exigência, como mostrado na imagem abaixo:
Etapa 3:
Agora insira o tamanho do inspetor e agregue valor conforme sua exigência:
Eu preciso para posicionar a imagem na parte superior e o texto abaixo da imagem ambos devem ser clicáveis ..
CODESEN
4
Use este código:
UIButton*button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.imageView.frame=CGRectMake(0.0f,0.0f,50.0f,44.0f);///You can replace it with your own dimensions.UILabel*label=[[UILabel alloc] initWithFrame:CGRectMake(0.0f,35.0f,50.0f,44.0f)];///You can replace it with your own dimensions.[button addSubview:label];
Penso que a resposta de Angel García Olloqui é outra boa solução, se você as colocar manualmente no construtor de interfaces, mas manterei minha solução, pois não preciso modificar as inserções de conteúdo de cada botão.
Simples e útil. Como definir a imagem e o título destacados?
precisa saber é o seguinte
para setHighlightedTextColor lable e você tem que jogar com forControlEvents
Rajneesh071
3
Você deve criar uma visualização de imagem personalizada para imagem e um rótulo personalizado para texto e adicionar ao seu botão como sub-visualizações. É isso aí.
É realmente simples, basta adicionar uma imagem ao plano de fundo do seu botão e fornecer um texto para o título do botão para obter um controle normal. É isso aí.
[btn setBackgroundImage:[UIImage imageNamed:@"img.png"] forState:UIControlStateNormal];[btn setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];[btn setTitle:@"Click Me" forState:UIControlStateNormal];
Respostas:
Eu vejo respostas muito complicadas, todas usando código. No entanto, se você estiver usando o Interface Builder , existe uma maneira muito fácil de fazer isso:
Você pode até usar a mesma abordagem por código, sem criar UILabels e UIImages dentro das outras soluções propostas. Mantenha-o sempre simples!
EDIT: anexado um pequeno exemplo com as 3 coisas definidas (título, imagem e plano de fundo) com inserções corretas
fonte
Background
imagem em vez deImage
, caso contrário você não verá o título nem definirá os valores inseridos para reposicionar o título.Acho que você está procurando esta solução para o seu problema:
... o restante da personalização do botão é seu dever agora e não se esqueça de adicionar o botão à sua visualização.
ATUALIZAÇÃO # 1 e ATUALIZAÇÃO # 2
ou, se você não precisar de um botão dinâmico, poderá adicioná-lo à sua exibição no Interface Builder e também poderá definir os mesmos valores. é bem parecido, mas aqui está essa versão também em uma imagem simples.
você também pode ver o resultado final no Interface Builder, como está na captura de tela.
fonte
O Xcode-9 e o Xcode-10 da Apple fizeram algumas alterações em relação ao Edge Inset agora, você pode alterá-lo no inspetor de tamanho.
Siga os passos abaixo:
Etapa 1: insira o texto e selecione a imagem que deseja mostrar:
Etapa 2: selecione o controle de botão conforme sua exigência, como mostrado na imagem abaixo:
Etapa 3: Agora insira o tamanho do inspetor e agregue valor conforme sua exigência:
fonte
mas o código a seguir mostrará o rótulo acima e a imagem em segundo plano
Não há necessidade de usar o rótulo e o botão no mesmo controle porque o UIButton possui as propriedades UILabel e UIimageview.
fonte
Use este código:
fonte
Use este código:
fonte
Encontrei o mesmo problema e o corrigi criando uma nova subclasse
UIButton
e substituindo olayoutSubviews:
método como abaixo:Penso que a resposta de Angel García Olloqui é outra boa solução, se você as colocar manualmente no construtor de interfaces, mas manterei minha solução, pois não preciso modificar as inserções de conteúdo de cada botão.
fonte
Faça
UIImageView
eUILabel
e imagem Jogo e texto para ambos isso .... Em seguida, coloque um botão personalizado sobre imageView e Etiqueta ....fonte
Você deve criar uma visualização de imagem personalizada para imagem e um rótulo personalizado para texto e adicionar ao seu botão como sub-visualizações. É isso aí.
Para fins de teste, use o
yourButtonSelected:
métodoEu acho que será útil para você.
fonte
É realmente simples, basta adicionar uma imagem ao plano de fundo do seu botão e fornecer um texto para o título do botão para obter um controle normal. É isso aí.
fonte
versão rápida:
fonte