iPhone上的CoreText和删除线

时间:2011-07-05 07:34:20

标签: iphone ios nsattributedstring strikethrough core-text

我目前正在努力解决在许多UITableViewCell中显示删除线文本的问题。用HTML编写的东西就像

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

我不想仅为单行文本使用UIWebView,尤其是它在小UITableViewCell中使用。我知道有可重复使用的单元格,但我希望保持内存效率更高的方式。

所以......在AliSoftware的NSAttributedString - 替换UILabel的帮助下,我正在使用OHAttributedLabel s。事实上它只能从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.hFoundation/NSAttributedString.h无济于事。我在网上看到过某个地方 NSStrikethroughStyleAttributeName = @"NSStrikethroughStyleAttributeName",以及NSUnderlinePatternSolid = 0NSUnderlineStyleSingle = 1,但对这些值进行硬编码并不能提供任何帮助。 我自动完成的一件事是等效的kCT...*常量,但有kCTUnderlineStyleAttributeNamekCTStrokeWidthAttributeName,...但没有提及kCTStrikethrough _任何事情。

我应该怎么做才能显示* $ |#!@一些删除线文字?

2 个答案:

答案 0 :(得分:7)

使用iOS 6,您可以使用NSStrikethroughStyleAttributeName

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

虽然看起来不合适,但numberWithInt值与NSUnderlineStyleSingle一样正确。

答案 1 :(得分:2)

更简单的方法可能是两个标签,使用这个问题的答案 - Pixel Width of the text in a UILabel - 来删除其中一个标签中的文字。