我目前正在努力解决在许多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.h
,Foundation/NSAttributedString.h
无济于事。我在网上看到过某个地方
NSStrikethroughStyleAttributeName = @"NSStrikethroughStyleAttributeName"
,以及NSUnderlinePatternSolid = 0
和NSUnderlineStyleSingle = 1
,但对这些值进行硬编码并不能提供任何帮助。
我自动完成的一件事是等效的kCT...*
常量,但有kCTUnderlineStyleAttributeName
,kCTStrokeWidthAttributeName
,...但没有提及kCTStrikethrough
_任何事情。
我应该怎么做才能显示* $ |#!@一些删除线文字?
答案 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 - 来删除其中一个标签中的文字。