UILabel con texto tachado

Quiero crear un UILabel en el que el texto sea así

enter image description here

¿Cómo puedo hacer esto? Cuando el texto es pequeño, la línea también debe ser pequeña.

CÓDIGO SWIFT

 let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) 

entonces:

 yourLabel.attributedText = attributeString 

Para hacer que una parte de la cuerda ataque, entonces proporcione el rango

 let somePartStringRange = (yourStringHere as NSString).range(of: "Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange) 

C objective

En iOS 6.0> UILabel admite NSAttributedString

 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)) 

Definición :

 - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange 

Parameters List:

nombre : una cadena que especifica el nombre del atributo. Las claves de atributo pueden ser suministradas por otro marco o pueden ser personalizados que usted defina. Para obtener información sobre dónde encontrar las claves de atributo proporcionadas por el sistema, consulte la sección de descripción general en Referencia de clase NSAttributedString.

valor : el valor del atributo asociado con el nombre.

aRange : el rango de caracteres al que se aplica el par atributo / valor especificado.

Entonces

 yourLabel.attributedText = attributeString; 

Para lesser than iOS 6.0 versions necesita 3-rd party component para hacer esto. Uno de ellos es TTTAttributedLabel , otro es OHAttributedLabel .

Prefiero NSAttributedString lugar de NSMutableAttributedString para este caso simple:

 NSAttributedString * title = [[NSAttributedString alloc] initWithString:@"$198" attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}]; [label setAttributedText:title]; 

Constantes para especificar los NSUnderlineStyleAttributeName y NSStrikethroughStyleAttributeName de una cadena atribuida:

 typedef enum : NSInteger { NSUnderlineStyleNone = 0x00, NSUnderlineStyleSingle = 0x01, NSUnderlineStyleThick = 0x02, NSUnderlineStyleDouble = 0x09, NSUnderlinePatternSolid = 0x0000, NSUnderlinePatternDot = 0x0100, NSUnderlinePatternDash = 0x0200, NSUnderlinePatternDashDot = 0x0300, NSUnderlinePatternDashDotDot = 0x0400, NSUnderlineByWord = 0x8000 } NSUnderlineStyle; 

En Swift, usando la enumeración para el estilo de línea de tachado único:

 let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]) label.attributedText = attrString 

Estilos de tachado adicionales ( Recuerde acceder a la enumeración utilizando .rawValue ):

  • NSUnderlineStyle.StyleNone
  • NSUnderlineStyle.StyleSingle
  • NSUnderlineStyle.StyleThick
  • NSUnderlineStyle.StyleDouble

Patrones de tachado (para ser OR-ed con el estilo):

  • NSUnderlineStyle.PatternDot
  • NSUnderlineStyle.PatternDash
  • NSUnderlineStyle.PatternDashDot
  • NSUnderlineStyle.PatternDashDotDot

Especifique que el tachado solo debe aplicarse a través de palabras (no espacios):

  • NSUnderlineStyle.ByWord

CÓDIGO SWIFT

 let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) 

entonces:

 yourLabel.attributedText = attributeString 

Gracias a la respuesta de Prince 😉

Tachado en Swift 4.0

 let attributeString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length)) self.yourLabel.attributedText = attributeString 

Me funcionó como un encanto.

Úselo como extensión

 extension String { func strikeThrough() -> NSAttributedString { let attributeString = NSMutableAttributedString(string: self) attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0,attributeString.length)) return attributeString } } 

Llamar así

 myLabel.attributedText = "my string".strikeThrough() 

Puede hacerlo en 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; 

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 

Otro método es para la extensión de cadena utilizada
Extensión

 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 } } 

Llamar a la función: lo usé como tal

 testUILabel.attributedText = "Your Text Goes Here!".strikeThrough() 

Gracias a @Yahya – actualización diciembre 2017
Crédito a @kuzdu – actualización agosto 2018

Golpea el texto de UILabel en Swift iOS. Por favor, intente esto, me está funcionando

 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 

Puede cambiar su estilo “estilo tachado” Estilo simple, estiloTráfilo, doble enter image description here

Para cualquiera que esté buscando cómo hacer esto en una celda de vista de tabla (Swift), debe establecer el texto de .attribute de esta manera:

 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 } 

Si quieres eliminar el tachado hazlo, de lo contrario se quedará!

 cell.textLabel?.attributedText = nil 

Use el código a continuación

 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; 

Para aquellos que enfrentan problemas con la huelga de texto de varias líneas

  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 

Crear extensión de cadena y agregar método debajo

 static func makeSlashText(_ text:String) -> NSAttributedString { let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text) attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) return attributeString } 

luego, úsela para su etiqueta como esta

 yourLabel.attributedText = String.makeSlashText("Hello World!") 

Este es el que puede usar en Swift 4 porque NSStrikethroughStyleAttributeName se ha cambiado a NSAttributedStringKey.strikethroughStyle

 let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length)) self.lbl.attributedText = attributeString