3

私は現在、多くUITableViewCellの s で取り消し線テキストを表示する必要があることに苦労しています。HTMLで書かれたものは次のようになります

<strike>€99</strike> 50% オフ => 今なら €49

a を 1 行のテキストだけに使用したくありませんUIWebView。特に、小さなUITableViewCells で使用される場合はそうです。再利用可能なセルなどがあることは知っていますが、可能な限りメモリ効率の良い方法を維持したいと考えています。

だから... AliSoftwareの-replacementNSAttributedStringの助けを借りて、 s を使用しています。iOS 4.0 以降でしか利用できないという事実は問題ではありません。UILabelOHAttributedLabel

属性付きの文字列をなんとか作成できました。テキストが に表示されます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 値:[NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle] range:NSRangeFromString(price)];
[attributedLabel setAttributedText:s];

ただし、ここでは、3 つのNS*定数は定義されていません。をインポートCoreText.hしましたが、Foundation/NSAttributedString.h役に立ちませんでした。Web のどこかで、 NSStrikethroughStyleAttributeName = @"NSStrikethroughStyleAttributeName"、 、および を見たことがNSUnderlinePatternSolid = 0ありますNSUnderlineStyleSingle = 1が、これらの値をハードコーディングしても何も得られません。オートコンプリートで得たのは同等のkCT...*定数ですがkCTUnderlineStyleAttributeName、 , kCTStrokeWidthAttributeName, ... はありますが、kCTStrikethrough_anything については言及されていません。

その *$|#!@ 取り消し線テキストを表示するにはどうすればよいですか?

4

2 に答える 2

7

iOS 6 では NSStrikethroughStyleAttributeName を使用できます

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

場違いに見えるかもしれませんが、numberWithInt 値は NSUnderlineStyleSingle として正しいです。

于 2012-12-05T22:29:54.343 に答える
2

より単純なアプローチは、この質問に対する答え ( UILabel のテキストのピクセル幅)を使用して、ラベルの 1 つのテキストを打ち消す 2 つのラベルである可能性があります。

于 2011-10-09T12:14:22.767 に答える