2014-09-01 17 views
17

Tôi đang cố gắng thêm gạch dưới vào một số văn bản trong ứng dụng Swift của mình. Đây là mã Tôi hiện có:Thêm NSUnderlineStyle.PatternDash vào NSAttributedString trong Swift?

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

let attrs = [NSUnderlineStyleAttributeName:NSUnderlineStyle.PatternDash] 

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

Nhưng tôi nhận được lỗi này trên text.addAttributes dòng:

NSString không giống với NSObject

Làm thế nào tôi có thể thêm một thuộc tính chứa trong một enum để một NSMutableAttributedString trong Swift?

Trả lời

43

Cập nhật cho Swift 4 cú pháp:

Dưới đây là một ví dụ đầy đủ của việc tạo ra một UILabel với văn bản được gạch dưới:

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 cho phép bạn vượt qua một Int đến một phương pháp mà phải mất một NSNumber, vì vậy bạn có thể làm điều này một chút sạch bằng cách loại bỏ việc chuyển đổi để NSNumber:

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

Lưu ý: Đây câu trả lời trước đây được sử dụng toRaw() như được sử dụng trong câu hỏi ban đầu, nhưng hiện tại không chính xác là toRaw() đã được thay thế bởi thuộc tính rawValue kể từ Xcode 6.1.

+0

bạn có thể vui lòng, cập nhật mã của bạn bằng cú pháp nhanh. – Vats

+0

@Vats, đã cập nhật. Hãy xem. – vacawama

3

Hóa ra tôi cần phương pháp toRaw() - công trình này:

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

Trong Xcode 6.1, SDK iOS 8.1 toRaw() đã được thay thế bởi rawValue:

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

Hoặc dễ dàng hơn:

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

Nếu bạn muốn một đường gạch gạch thực tế, bạn nên HOẶC | các giá trị thô của cả hai mẫu văn bản PatternDash và StyleSingle như sau:

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

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

let attrString = NSAttributedString(string: plainText, attributes: attribs) 
Các vấn đề liên quan