我正在尝试使用删除线创建一个属性字符串,但是,这个简单的任务似乎比我预期的更难理解。这是我目前的(不起作用)。谢谢你的帮助!
NSAttributedString *theTitle = [[[NSAttributedString alloc] initWithString:@"strikethrough text" attributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSColor whiteColor], NSForegroundColorAttributeName, NSUnderlinePatternSolid, NSStrikethroughStyleAttributeName, nil]] autorelease];
答案 0 :(得分:20)
首先,NSStrikethroughStyleAttributeName
的值必须是NSNumber
,而不是简单的整数。其次,我认为你必须包括NSUnderlineStyleSingle
:
...:[NSDictionary dictionaryWithObjectsAndKeys:
...,
[NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle],
NSStrikethroughStyleAttributeName,
nil]...
答案 1 :(得分:17)
您也可以使用:
NSAttributedString *theAttributedString;
theAttributedString = [[NSAttributedString alloc] initWithString:theString
attributes:@{NSStrikethroughStyleAttributeName:
[NSNumber numberWithInteger:NSUnderlineStyleSingle]}];
更新:
Swift 2.0版
let theAttributedString = NSAttributedString(string: theString, attributes: [NSStrikethroughColorAttributeName: NSUnderlineStyle.StyleSingle])
答案 2 :(得分:3)
func addAttributes(attrs: [String : AnyObject], range: NSRange)
NSUnderlineStyleAttributeName
:
此属性的值是包含整数的NSNumber
对象。
由于NSUnderlineStyle
枚举的rawValue是Int Type,您应该用它初始化NSNumber
对象
Swift2.1:
attrStr.addAttributes([NSStrikethroughStyleAttributeName: NSNumber(integer: NSUnderlineStyle.StyleSingle.rawValue)], range: NSMakeRange(x, y))
x是位置,文字的开头
y是文本的长度
答案 3 :(得分:1)
Swift 4:
NSAttributedString(string: "test string", attributes: [.strikethroughStyle: NSUnderlineStyle.styleSingle.rawValue])
Swift 5:
NSAttributedString(string: "test string", attributes: [.strikethroughStyle: NSUnderlineStyle.single.rawValue])
请注意 .strikethroughStyle
和 .underlineStyle
期望一个整数值(特别是 NSNumber
),因此我们使用 NSUnderlineStyle
的 .rawValue
例子。
(Setting NSUnderlineStyle causes unrecogognized selector exception)