2014-09-01 22 views
17

Swift uygulamasında bazı metne alt çizgi eklemeye çalışıyorum.Swift'de NSAttributedString için NSUnderlineStyle.PatternDash ekleyin?

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

let attrs = [NSUnderlineStyleAttributeName:NSUnderlineStyle.PatternDash] 

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

Ama text.addAttributes satırında bu hatayı alıyorum:

NSString Ben içerdiği bir özelliğini ekleyebilirsiniz nasıl NSObject

özdeş değildir, bu şu anda var kodudur Swift'de bir NSMutableAttributedString için bir numarada?

cevap

43

Güncelleme için Swift 4 sözdizimi:

İşte metni altı çizili bir UILabel yaratma tam örnek:

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:

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

Not:

Swift Eğer NSNumber dönüşüm kaldırarak bunu biraz daha temiz hale böylece, bir NSNumber götüren bir yönteme bir Int geçmesine izin verir bu Cevap daha önce toRaw() orijinal soruda kullanıldığı gibi kullanılmış, ancak şimdi toRaw() Xcode 6.1'den itibaren rawValue ile değiştirilmiştir.

+0

kodunuzu swift4 sözdizimi ile güncelleyebilirsiniz. – Vats

+0

@Vats, güncellendi. Bir göz at. – vacawama

3

Ben toRaw() yöntemi gerekli çıkıyor - bu işler:

text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length)) 
7
8.1 toRaw() rawValue almıştır Xcode 6.1 SDK iOS yılında

:

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

Veya Kolay:

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

Eğer gerçek bir kesik çizgi istiyorsanız, yapmanız gerekir VEYA | aşağıdaki gibi PatternDash ve StyleSingle enumlerinin ham değerleri:

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

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

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