Como seria possível incluir texto em negrito e não em negrito em um uiLabel?
Prefiro não usar um UIWebView. Também li isso pode ser possível usando NSAttributedString, mas não tenho idéia de como usá-lo. Alguma ideia?
A Apple consegue isso em vários de seus aplicativos; Exemplos de captura de tela:
Obrigado! - Dom
ios
objective-c
swift
uilabel
nsattributedstring
DomMaiocchi
fonte
fonte
Respostas:
Atualizar
No Swift, não precisamos lidar com coisas antigas do iOS5, além da sintaxe ser mais curta, para que tudo se torne realmente simples:
Swift 5
Swift 3
Uso:
Bônus: Internacionalização
Algumas pessoas comentaram sobre internacionalização. Pessoalmente, acho que isso está fora do escopo desta questão, mas para fins de instrução, é assim que eu faria
Resultado (supondo que as caracteres localizáveis em inglês e japonês estejam disponíveis)
Resposta anterior para iOS6 e posterior (o Objective-C ainda funciona):
Em iOS6
UILabel
,UIButton
,UITextView
,UITextField
, o apoio atribuído cordas que significa que não precisa para criarCATextLayer
s como o nosso destinatário para cordas atribuídas. Além disso, para criar a string atribuída, não precisamos mais brincar com o CoreText :) Temos novas classes no obj-c Foundation.framework likeNSParagraphStyle
e em outras constantes que facilitarão nossa vida. Yay!Então, se tivermos esta string:
Só precisamos criar a sequência atribuída:
Há algumas boas postagens de blog introdutórias aqui de caras do invasivecode que explicam com mais exemplos os usos de
NSAttributedString
, procure "Introdução ao NSAttributedString para iOS 6" e "Strings atribuídas para iOS usando o Interface Builder" :)PS: Acima do código, ele deve funcionar, mas foi compilado pelo cérebro. Espero que seja o suficiente :)
Resposta antiga para iOS5 e abaixo
Use um CATextLayer com um NSAttributedString! muito mais leve e mais simples que 2 UILabels. (iOS 3.2 e superior)
Exemplo.
Não se esqueça de adicionar a estrutura QuartzCore (necessária para CALayers) e CoreText (necessário para a sequência atribuída).
O exemplo abaixo adicionará uma subcamada à barra de ferramentas do controlador de navegação. à Mail.app no iPhone. :)
Neste exemplo, tenho apenas dois tipos diferentes de fonte (negrito e normal), mas você também pode ter tamanho de fonte diferente, cor diferente, itálico, sublinhado, etc. Dê uma olhada nas chaves de sequência de caracteres dos atributos NSAttributedString / NSMutableAttributedString e CoreText .
Espero que ajude
fonte
[NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]
torna-se@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
.{
), não colchetes ([
).Experimente uma categoria no UILabel:
Veja como é usado:
E aqui está a categoria
UILabel + Boldify.h
UILabel + Boldify.m
Observe que isso funcionará apenas no iOS 6 e posterior. Ele será simplesmente ignorado no iOS 5 e versões anteriores.
fonte
@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}
I upvoted[UIFont boldSystemFontOfSize:self.font.pointSize]
TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
Isso é fácil de fazer no Interface Builder :
1) faça o UILabel Atribuído no Inspetor de Atributos
2) selecione parte da frase que você deseja colocar em negrito
3) altere sua fonte (ou negrito da mesma fonte) no seletor de fontes
Isso é tudo!
fonte
Há uma categoria com base na categoria do bbrame. Funciona de maneira semelhante, mas permite que você negue o mesmo
UILabel
várias vezes com resultados cumulativos.UILabel + Boldify.h
UILabel + Boldify.m
Com essas correções, você pode usá-lo várias vezes, por exemplo:
resultará em: " Atualizado: 14/10/2012 às 21:59 ".
fonte
Funcionou para mim:
Para a versão Swift: veja aqui
fonte
Adotei a resposta do Crazy Yoghurt às extensões do swift.
Pode não haver uma boa conversão entre o Range e o NSRange, mas não encontrei algo melhor.
fonte
boldSubstring(_:)
paravar range = text.string.range(of: substr, options: .caseInsensitive)
a cordas faz com capitalização diferente também negrito.Confira TTTAttributedLabel . É um substituto para o UILabel que permite que você tenha fontes e cores misturadas em um único rótulo, definindo NSAttributedString como o texto desse rótulo.
fonte
Nesse caso, você pode tentar,
fonte
Para tornar o texto em negrito e sublinhado em um UILabel. Basta adicionar as seguintes linhas no seu código.
fonte
Use o código abaixo. Espero que ajude para você.
fonte
Swift 4:
fonte
Espero que este atenda às suas necessidades. Forneça a sequência a ser processada como entrada e forneça as palavras que devem estar em negrito / coloridas como entrada.
Obrigado. Feliz codificação.
fonte
Não há necessidade de NSRange com o seguinte código que acabei de implementar no meu projeto (no Swift):
fonte
Se você deseja facilitar o uso de seqüências de caracteres atribuídas, tente usar o Attributed String Creator, que irá gerar o código para você. https://itunes.apple.com/us/app/attributed-string-creator/id730928349
fonte