2014-09-01 14 views
17

Sto cercando di aggiungere una sottolineatura ad un testo nella mia app Swift. Questo è il codice che ho attualmente:Aggiungi NSUnderlineStyle.PatternDash a NSAttributoString in Swift?

let text = NSMutableAttributedString(string: self.currentHome.name) 

let attrs = [NSUnderlineStyleAttributeName:NSUnderlineStyle.PatternDash] 

text.addAttributes(attrs, range: NSMakeRange(0, text.length)) 
homeLabel.attributedText = text 

Ma ottengo questo errore sulla linea text.addAttributes:

NSString non è identico a NSObject

Come posso aggiungere un attributo contenuta in un enum a NSMutableAttributedString in Swift?

risposta

43

Aggiornamento per Swift 4 sintassi:

Ecco un esempio completo di creazione di un UILabel dalla sottolineatura:

let homeLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30)) 

let text = NSMutableAttributedString(string: "hello, world!") 

let attrs = [NSAttributedStringKey.underlineStyle: NSUnderlineStyle.patternDash.rawValue | NSUnderlineStyle.styleSingle.rawValue] 

text.addAttributes(attrs, range: NSRange(location: 0, length: text.length)) 

homeLabel.attributedText = text 

Swift 2:

Swift permette di trasmettere l'Int a un metodo che prende un NSNumber, in modo da poter rendere questo un po 'più pulito, eliminando la conversione a NSNumber:

text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length)) 

Nota: Questa risposta utilizzata in precedenza toRaw() come utilizzata nella domanda originale, ma ora non è corretta poiché toRaw() è stata sostituita dalla proprietà rawValue a partire da Xcode 6.1.

+0

puoi aggiornare il codice con la sintassi swift4. – Vats

+0

@Vats, aggiornato. Guarda. – vacawama

3

'venuto fuori che mi serviva il metodo toRaw() - questo funziona:

text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length)) 
7

in Xcode 6.1, iOS SDK 8.1 toRaw() è stato sostituito da rawValue:

text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length)) 

o più facile:

var text : NSAttributedString = NSMutableAttributedString(string: str, attributes : [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]) 
13

Se si vuole una linea tratteggiata reale, si dovrebbe OR | i valori non elaborati di enumerazioni PatternDash e StyleSingle come di seguito:

let dashed  = NSUnderlineStyle.PatternDash.rawValue | NSUnderlineStyle.StyleSingle.rawValue 

let attribs = [NSUnderlineStyleAttributeName : dashed, NSUnderlineColorAttributeName : UIColor.whiteColor()]; 

let attrString = NSAttributedString(string: plainText, attributes: attribs)