Подтвердить что ты не робот

NSAttributedString с зачеркиванием

Я пытаюсь создать привязанную строку с зачеркиванием, однако эта простая задача, по-видимому, сложнее выяснить, чем я ожидал. Вот что я сейчас (что не работает). Спасибо за помощь!

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

Ответ 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 - длина текста