带有删除线的NSAttributedString

时间:2011-02-11 19:38:16

标签: cocoa

我正在尝试使用删除线创建一个属性字符串,但是,这个简单的任务似乎比我预期的更难理解。这是我目前的(不起作用)。谢谢你的帮助!

NSAttributedString *theTitle = [[[NSAttributedString alloc] initWithString:@"strikethrough text" attributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSColor whiteColor], NSForegroundColorAttributeName, NSUnderlinePatternSolid, NSStrikethroughStyleAttributeName, nil]] autorelease];

4 个答案:

答案 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)