我试图在我的Swift应用中为某些文字添加下划线。这是我目前的代码:
let text = NSMutableAttributedString(string: self.currentHome.name)
let attrs = [NSUnderlineStyleAttributeName:NSUnderlineStyle.PatternDash]
text.addAttributes(attrs, range: NSMakeRange(0, text.length))
homeLabel.attributedText = text
但我在text.addAttributes
行上收到此错误:
不同
NSString
与NSObject
如何将枚举中包含的属性添加到Swift中的NSMutableAttributedString?
答案 0 :(得分:48)
更新 Swift 4 语法:
以下是使用带下划线的文字创建UILabel
的完整示例:
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允许您将Int
传递给采用NSNumber
的方法,因此您可以通过删除转换为NSNumber
来使其更加清晰:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
注意:此答案之前使用了原始问题中使用的toRaw()
,但现在不正确,因为toRaw()
已被Xcode 6.1中的属性rawValue
替换。
答案 1 :(得分:13)
如果你想要一个实际的虚线,你应该OR | PatternDash和StyleSingle枚举的原始值如下所示:
let dashed = NSUnderlineStyle.PatternDash.rawValue | NSUnderlineStyle.StyleSingle.rawValue
let attribs = [NSUnderlineStyleAttributeName : dashed, NSUnderlineColorAttributeName : UIColor.whiteColor()];
let attrString = NSAttributedString(string: plainText, attributes: attribs)
答案 2 :(得分:7)
在Xcode 6.1中,SDK iOS 8.1 toRaw()
已被rawValue
取代:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
或更容易:
var text : NSAttributedString = NSMutableAttributedString(string: str, attributes : [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
答案 3 :(得分:3)
原来我需要toRaw()
方法 - 这有效:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length))