Eu quero criar um UILabel
em que o texto seja assim
Como posso fazer isso? Quando o texto é pequeno, a linha também deve ser pequena.
NSAttributedString
e a UILabel attributedText
propriedade.
Eu quero criar um UILabel
em que o texto seja assim
Como posso fazer isso? Quando o texto é pequeno, a linha também deve ser pequena.
NSAttributedString
e a UILabel attributedText
propriedade.
Respostas:
SWIFT 4 UPDATE CODE
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
então:
yourLabel.attributedText = attributeString
Para fazer alguma parte da corda atingir, em seguida, forneça alcance
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C
No iOS 6.0> UILabel
suportaNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
Rápido
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Definição :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
nome : uma string especificando o nome do atributo. As chaves de atributo podem ser fornecidas por outra estrutura ou podem ser personalizadas que você definir. Para obter informações sobre onde encontrar as chaves de atributo fornecidas pelo sistema, consulte a seção de visão geral em Referência da classe NSAttributedString.
valor : o valor do atributo associado ao nome.
aRange : o intervalo de caracteres aos quais o par atributo / valor especificado se aplica.
Então
yourLabel.attributedText = attributeString;
Pois lesser than iOS 6.0 versions
você precisa 3-rd party component
fazer isso. Um deles é TTTAttributedLabel , outro é OHAttributedLabel .
Em Swift, usando o enum para o estilo de linha tachada única:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Estilos de tachado adicionais ( lembre-se de acessar o enum usando .rawValue ):
Padrões tachados (para serem OR com o estilo):
Especifique que o tachado deve ser aplicado apenas em palavras (não em espaços):
Eu prefiro NSAttributedString
a NSMutableAttributedString
este caso simples:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
Constantes para especificar os atributos NSUnderlineStyleAttributeName
e NSStrikethroughStyleAttributeName
de uma string atribuída:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Tachado em Swift 5.0
let attributeString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range: NSMakeRange(0, attributeString.length))
self.yourLabel.attributedText = attributeString
Funcionou para mim como um encanto.
Use-o como extensão
extension String {
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range:NSMakeRange(0,attributeString.length))
return attributeString
}
}
Ligar assim
myLabel.attributedText = "my string".strikeThrough()
Extensão UILabel para tachado Ativar / Desativar.
extension UILabel {
func strikeThrough(_ isStrikeThrough:Bool) {
if isStrikeThrough {
if let lblText = self.text {
let attributeString = NSMutableAttributedString(string: lblText)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length))
self.attributedText = attributeString
}
} else {
if let attributedStringText = self.attributedText {
let txt = attributedStringText.string
self.attributedText = nil
self.text = txt
return
}
}
}
}
Use-o assim:
yourLabel.strikeThrough(btn.isSelected) // true OR false
CÓDIGO SWIFT
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
então:
yourLabel.attributedText = attributeString
Graças à resposta do Príncipe ;)
SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text Goes Here")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
self.lbl_productPrice.attributedText = attributeString
Outro método é usar String Extension
Extension
extension String{
func strikeThrough()->NSAttributedString{
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: self)
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
return attributeString
}
}
Chamando a função: usei assim
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
Crédito para @Yahya - atualização de dezembro de 2017
Crédito para @kuzdu - atualização de agosto de 2018
value
0
e Purnendu roy passavalue: NSUnderlineStyle.styleSingle.rawValue
Você pode fazer isso no IOS 6 usando NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Riscar o texto UILabel no Swift iOS. Por favor, tente isso está funcionando para mim
let attributedString = NSMutableAttributedString(string:"12345")
attributedString.addAttribute(NSAttributedStringKey.baselineOffset, value: 0, range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSNumber(value: NSUnderlineStyle.styleThick.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSAttributedStringKey.strikethroughColor, value: UIColor.gray, range: NSMakeRange(0, attributedString.length))
yourLabel.attributedText = attributedString
Você pode alterar seu "estilo tachado", como estiloSingle, styleThick, styleDouble
Swift 5
extension String {
/// Apply strike font on text
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: 1,
range: NSRange(location: 0, length: attributeString.length))
return attributeString
}
}
Exemplo:
someLabel.attributedText = someText.strikeThrough()
Para quem está procurando como fazer isso em uma célula tableview (Swift), você deve definir o .attributeText assim:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TheCell")!
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: message)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
cell.textLabel?.attributedText = attributeString
return cell
}
Se quiser remover o tachado, faça isso, caso contrário, ele ficará grudado !:
cell.textLabel?.attributedText = nil
Swift 4.2
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: product.price)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))
lblPrice.attributedText = attributeString
Posso chegar atrasado para a festa.
De qualquer forma, estou ciente do NSMutableAttributedString
mas recentemente consegui a mesma funcionalidade com uma abordagem um pouco diferente.
Depois de seguir todos os passos acima, meu Label, UIView e suas restrições ficaram parecidos com a imagem abaixo.
Use o código abaixo
NSString* strPrice = @"£399.95";
NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:strPrice];
[finalString addAttribute: NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range: NSMakeRange(0, [titleString length])];
self.lblOldPrice.attributedText = finalString;
Altere a propriedade do texto para atribuída e selecione o texto e clique com o botão direito para obter a propriedade da fonte. Clique no tachado.
Para aqueles que enfrentam problemas com greves de texto de várias linhas
let attributedString = NSMutableAttributedString(string: item.name!)
//necessary if UILabel text is multilines
attributedString.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughStyleAttributeName, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.darkGray, range: NSMakeRange(0, attributedString.length))
cell.lblName.attributedText = attributedString
Crie a extensão String e adicione o método abaixo
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
então use para o seu rótulo como este
yourLabel.attributedText = String.makeSlashText("Hello World!")
Este é o que você pode usar no Swift 4 porque NSStrikethroughStyleAttributeName foi alterado para NSAttributedStringKey.strikethroughStyle
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
self.lbl.attributedText = attributeString
Swift 4 e 5
extension NSAttributedString {
/// Returns a new instance of NSAttributedString with same contents and attributes with strike through added.
/// - Parameter style: value for style you wish to assign to the text.
/// - Returns: a new instance of NSAttributedString with given strike through.
func withStrikeThrough(_ style: Int = 1) -> NSAttributedString {
let attributedString = NSMutableAttributedString(attributedString: self)
attributedString.addAttribute(.strikethroughStyle,
value: style,
range: NSRange(location: 0, length: string.count))
return NSAttributedString(attributedString: attributedString)
}
}
Exemplo
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)