Alguém pode sugerir como sublinhar o título de um UIButton? Eu tenho um UIButton do tipo Personalizado e quero que o Título seja sublinhado, mas o Interface Builder não fornece nenhuma opção para fazer isso.
No Interface Builder, quando você seleciona a opção de fonte para um botão, ele fornece a opção para selecionar Nenhum, Único, Duplo, Cor, mas nenhum deles fornece nenhuma alteração no Título no botão.
Qualquer ajuda apreciada.
text
formatting
uibutton
RVN
fonte
fonte
Respostas:
UIUnderlinedButton.h
UIUnderlinedButton.m
fonte
drawRect
não ser chamada na rotação. Isso pode ser resolvido configurando o botão para redesenhar da seguinte maneira: omyButton.contentMode = UIViewContentModeRedraw;
que força o botão a redesenhar quando os limites mudam.setTitle
método assim:objective-c - (void)setTitle:(NSString *)title forState:(UIControlState)state { [super setTitle:title forState:state]; [self setNeedsDisplay]; }
Para usar o construtor de interface para sublinhar, é necessário:
Vídeo que alguém fez https://www.youtube.com/watch?v=5-ZnV3jQd9I
fonte
setTitle
com o texto atribuído. Para mim, criar um botão personalizado para desenhar sublinhado é um pouco exótico (talvez eu ainda seja novo no iOS, mesmo tendo um aplicativo concluído).Agora, a partir do iOS6, agora é possível usar um NSAttributedString para executar sublinhados (e qualquer outro suporte atribuído a cadeias) de uma maneira muito mais flexível:
Nota: adicionou isso como outra resposta - como uma solução totalmente diferente da minha anterior.
Editar: estranhamente (no iOS8, pelo menos), você precisa sublinhar o primeiro caractere, caso contrário, não funciona!
Como alternativa, defina o primeiro caracter sublinhado com cores claras!
fonte
Você pode fazer isso no próprio construtor de interface.
fonte
É muito simples com string atribuída
Cria um dicionário com atributos definidos e aplica-se à sequência atribuída. Em seguida, você pode definir a sequência atribuída como attibutedtitle em uibutton ou attributetext em uilabel.
fonte
commentString
; você copiou da resposta de @ NickH247?Aqui está a minha função, funciona no Swift 1.2.
Extensão UPDATE Swift 3.0:
fonte
A resposta de Nick é uma maneira excelente e rápida de fazer isso.
Eu adicionei suporte
drawRect
para sombras.A resposta de Nick não leva em conta se o título do botão tiver uma sombra abaixo do texto:
Mas você pode mover o sublinhado para baixo pela altura da sombra da seguinte forma:
Então você terá algo parecido com isto:
fonte
Para Swift 3, a seguinte extensão pode ser usada:
fonte
fonte
Expandindo a resposta de @Nick H247, tive um problema em que, em primeiro lugar, o sublinhado não era redesenhado quando o botão era redimensionado na rotação; isso pode ser resolvido configurando o botão para redesenhar da seguinte maneira:
Isso força o botão a redesenhar quando os limites mudam.
Em segundo lugar, o código original supunha que você tinha apenas 1 linha de texto no botão (meu botão quebra duas linhas na rotação) e o sublinhado aparece apenas na última linha de texto. O código drawRect pode ser modificado para primeiro calcular o número de linhas no botão e, em seguida, colocar um sublinhado em todas as linhas, e não apenas na parte inferior, da seguinte forma:
Espero que este código ajude outra pessoa!
fonte
Em rápido
fonte
Você pode usar esse código para adicionar sublinhado com espaçamento no botão.
1 - Referência do Construtor de Interface
2 - usando o código descrito
fonte
A versão Swift 5.0 que funciona em setembro de 2019 no Xcode 10.3:
Para usá-lo, defina primeiro o título do botão
button.setTitle("Button Title", for: .normal)
e depois liguebutton.underlineText()
para torná-lo sublinhado.fonte
Como lidar com o caso quando mantemos um botão sublinhado pressionado? Nesse caso, a cor do texto do botão muda de acordo com a cor destacada, mas a linha permanece da cor original. Digamos que se a cor do texto do botão no estado normal for preta, o sublinhado também terá a cor preta. A cor destacada do botão é branca. Manter o botão pressionado altera a cor do texto do botão de preto para branco, mas a cor do sublinhado permanece preta.
fonte
Eu acredito que é algum bug no editor de fontes no XCode. Se você estiver usando o construtor de interface, precisará alterar o título de Simples para Atribuído, abra o TextEdit, crie texto sublinhado e copie e cole para caixa de texto no XCode
fonte
A resposta de Nick H247, mas a abordagem Swift:
fonte
fonte
Versão Swift 3 para a resposta do @ NickH247 com sublinhado personalizado de cor, largura de linha e espaço:
fonte