2011-02-11 7 views
12

取り消し線付きの属性付き文字列を作成しようとしていますが、この単純な作業は予想以上に難しいようです。ここに私が現在持っているものがあります(これはうまくいきません)。助けてくれてありがとう!取り消し線付きNSAttributedString

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

答えて

18

まず、NSStrikethroughStyleAttributeNameの値がNSNumberはなく、単純な整数でなければなりません。第二に、私はあなたがNSUnderlineStyleSingleを含めることがあると思う:

...:[NSDictionary dictionaryWithObjectsAndKeys: 
     ..., 
     [NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle], 
     NSStrikethroughStyleAttributeName, 
     nil]... 
+0

完璧に...感謝しました。 – ambientdiscourse

+0

これは非常に役に立ちました。ありがとう! NSUnderlinePatternSolid |の後の 'numberWithInteger:'メッセージを閉じるための閉じ括弧がありません。 NSUnderlineStyleSingle'の前と 'NSStrikethroughStyleAttributeName'の前に。 – morgant

15

あなたは、単に使用することができます。

NSAttributedString *theAttributedString; 
theAttributedString = [[NSAttributedString alloc] initWithString:theString 
      attributes:@{NSStrikethroughStyleAttributeName: 
      [NSNumber numberWithInteger:NSUnderlineStyleSingle]}]; 

更新:

スウィフト2.0バージョン

let theAttributedString = NSAttributedString(string: theString, attributes: [NSStrikethroughColorAttributeName: NSUnderlineStyle.StyleSingle]) 
+1

これは間違っています。色属性にスタイルを割り当てることはできません。 'NSStrategyColorAttributeName:NSUnderlineStyle.StyleSingle]' –

2
func addAttributes(attrs: [String : AnyObject], range: NSRange) 

NSUnderlineStyleAttributeName この属性の値は、整数を含むNSNumberオブジェクトです。 NSUnderlineStyle enumのrawValueはint型ですので

は、あなたはそれでNSNumberオブジェクトを初期化する必要があります

Swift2.1:

attrStr.addAttributes([NSStrikethroughStyleAttributeName: NSNumber(integer: NSUnderlineStyle.StyleSingle.rawValue)], range: NSMakeRange(x, y)) 

のx位置、テキストの始まりです

yはテキストの長さです

+0

'NSRangeMake(0、theAttributedString.lenght)'を書くと動作しない 'NSRangeMake(0、4)'を書くと範囲が動作しません。最初の4文字の文字列に、どのように私はこれを行うことができますか? – Dhiru

+0

iOS 10.3には既知のバグがあります。このバグは、範囲内で適用された場合、ストライクスルー属性は機能しません。この問題を回避するには、次のようにします。 'attrStr.addAttributes([NSBaselineOffsetAttributeName:NSNumber(integerLiteral:0)]、範囲:NSMakeRange(x、y))' – jdev