NSAttributedString с зачеркиванием
Я пытаюсь создать привязанную строку с зачеркиванием, однако эта простая задача, по-видимому, сложнее выяснить, чем я ожидал. Вот что я сейчас (что не работает). Спасибо за помощь!
NSAttributedString *theTitle = [[[NSAttributedString alloc] initWithString:@"strikethrough text" attributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSColor whiteColor], NSForegroundColorAttributeName, NSUnderlinePatternSolid, NSStrikethroughStyleAttributeName, nil]] autorelease];
Ответы
Ответ 1
Во-первых, значение NSStrikethroughStyleAttributeName
должно быть NSNumber
, а не простое целое число. Во-вторых, я думаю, вы должны включить NSUnderlineStyleSingle
:
...:[NSDictionary dictionaryWithObjectsAndKeys:
...,
[NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle],
NSStrikethroughStyleAttributeName,
nil]...
Ответ 2
Вы также можете просто использовать:
NSAttributedString *theAttributedString;
theAttributedString = [[NSAttributedString alloc] initWithString:theString
attributes:@{NSStrikethroughStyleAttributeName:
[NSNumber numberWithInteger:NSUnderlineStyleSingle]}];
Обновление:
версия Swift 2.0
let theAttributedString = NSAttributedString(string: theString, attributes: [NSStrikethroughColorAttributeName: NSUnderlineStyle.StyleSingle])
Ответ 3
func addAttributes(attrs: [String : AnyObject], range: NSRange)
NSUnderlineStyleAttributeName
:
Значение этого атрибута - это объект NSNumber
, содержащий целое число.
Так как NSUnderlineStyle
enum rawValue - это Int Type, вы должны инициализировать объект NSNumber
с ним
Swift2.1:
attrStr.addAttributes([NSStrikethroughStyleAttributeName: NSNumber(integer: NSUnderlineStyle.StyleSingle.rawValue)], range: NSMakeRange(x, y))
x - это местоположение, начало вашего текста
y - длина текста