CoreText и зачеркивание на iPhone - PullRequest
3 голосов
/ 05 июля 2011

В настоящее время я борюсь с необходимостью отображения зачеркнутого текста во многих UITableViewCell с.То, что написано на HTML, будет выглядеть как

<strike>€99</strike> save 50% => now €49

. Я не хочу использовать UIWebView только для одной строки текста, особенно если оно используется в небольших UITableViewCell с.Я знаю, что есть многократно используемые ячейки и все такое, но я бы хотел, чтобы все было как можно более эффективным способом памяти.

Итак ... Я использую NSAttributedString s с помощью AliSoftware UILabel -замена OHAttributedLabel.Тот факт, что он доступен только начиная с iOS 4.0, не проблема, поскольку мы используем все виды вещей, только 4.0-совместимых.

Мне удается создать атрибутивную строку, она отображает текст в OHAttributedLabel,ОК, это круто.Но то, чего я не могу достичь, это установить атрибут «зачеркнутый» или «зачеркнутый».

По сути, я иду так:

NSString *price = [NSString stringWithFormat:@"%01.2f €", product.price];
NSString *rate = [NSString stringWithFormat:@" -%01.0f%%", product.reductionRate];

NSMutableAttributedString *s = [NSMutableAttributedString attributedStringWithString:price];

[s addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle] range:NSRangeFromString(price)];
[attributedLabel setAttributedText:s];

Но здесь три NS* константыне определены.Я импортировал CoreText.h, Foundation/NSAttributedString.h, но безрезультатно.Я где-то в сети видел, что NSStrikethroughStyleAttributeName = @"NSStrikethroughStyleAttributeName" и NSUnderlinePatternSolid = 0 и NSUnderlineStyleSingle = 1, но жесткое кодирование этих значений ничего не дает.Одна вещь, которую я получил при автозаполнении, это эквивалент kCT...* констант, но есть kCTUnderlineStyleAttributeName, kCTStrokeWidthAttributeName, ... но нет упоминания о kCTStrikethrough _anything.

Что мне делать, чтобыотобразить этот * $ | #! @ фрагмент зачеркнутого текста?

Ответы [ 2 ]

7 голосов
/ 06 декабря 2012

В iOS 6 вы можете использовать NSStrikethroughStyleAttributeName

[attributedString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:selectedRange];

Хотя это может показаться неуместным, значение numberWithInt является правильным как NSUnderlineStyleSingle.

2 голосов
/ 09 октября 2011

Более простым подходом могут быть две метки, использующие ответ на этот вопрос - Ширина текста в пикселях в UILabel - чтобы зачеркнуть текст в одной из меток.

...