macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSMutableAttributedStringクラス

INDEX>Foundation>NSMutableAttributedString

apple(OS X)
apple(iOS)

解説

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0以降
iOS 3.2以降
定義 NSAttributedString.h

概要

適合するプロトコル

本クラスについて

変更可能な属性付き文字列のクラスです。変更不可な属性付き文字列は、このクラスのスーパークラスであるNSAttributedStringを使用してください。
このクラスもNSAttributedStringと同じく、iOS3.2から使えるようになっています。

文字の属性とはフォント、サイズ、色、太字などの文字スタイルに加え、段落スタイル、日本語での縦書き表示の際の文字の向きなどが含まれます。

iOS5.1では、UIKitにはNSAttributedStringを直接描画するAPIは無いので、iOSではCoreTextフレームワークとともにこのクラスを使用します。

作成

親クラスであるNSAttributedStringのメソッドを使います。allocで作成して文字列から初期化するメソッド(– initWithString)、他の属性付き文字列から初期化するメソッド(– initWithAttributedString)、文字列と属性の辞書から初期化するメソッド(– initWithString:attributes)があります。3番目の文字列と属性の辞書から作る方法だと柔軟に設定を変更することができます。辞書で設定できるキーの一覧はCTStringAttributes.hにあります。

文字情報の取得

文字列を取得するには(– string)を使います。文字列の長さを取得するには(– length)を使います。属性付き文字列をNSMutableStringで取得するには(– mutableString)を使います。

文字列を変更する

属性付き文字列の指定した範囲を別の文字列に入れ替えるには(– replaceCharactersInRange:withString)を使います。置き換える文字列の属性は入れ替える範囲の最初の文字の属性と同じになります。削除するだけなら(– deleteCharactersInRange)メソッドを使います。

属性を変更する

指定した範囲の文字列の属性を別のものに置き換えるには(– setAttributes:range)メソッドを使います。setAttributes:で属性の辞書を渡します。指定しない属性は指定した範囲の属性が使われるのではなくデフォルトの設定が使われるので注意が必要です。
一部の属性のみを変更する場合は(– addAttribute:value:range)メソッドを使用します。

サンプル カラーのみを変更する

CGColorRef greenColor = [[UIColor greenColor] CGColor];
[amText addAttribute:@"CTForegroundColor" value:(__bridge id)greenColor range:NSMakeRange(3, 10)];
CFRelease(greenColor);

セットした属性のみが上書きされます。二つ以上の属性を変更したい場合は(– addAttributes:range)メソッドを使い、変更したい属性のみを入れた辞書を渡します。
現在の属性を取り除くためには(– removeAttribute:range)メソッドを使います。指定した範囲の属性がデフォルトの値になります。

部分的な取り出し

属性付き文字列から範囲を指定して部分的に属性付き文字列として取り出すには(– attributedSubstringFromRange:)を使います。

文字と属性の両方を変更する

別の属性付き文字列をこの属性付き文字列の末尾に付け加える場合は(– appendAttributedString)メソッドを使用します。属性付き文字列の間に別の属性付き文字列を挿入する場合は(– insertAttributedString:atIndex)メソッドを使用します。指定の範囲を別の属性付き文字列に入れ替えるには(– replaceCharactersInRange:withAttributedString)メソッドを使用します。すべてを別の属性付き文字列に入れ替える場合は(– setAttributedString)メソッドを使用します。

同じ属性の列挙

指定した範囲の同じ属性を持つ範囲を列挙するには(– enumerateAttributesInRange:options:usingBlock)メソッドを使います。指定した範囲の特定の属性を列挙するには(– enumerateAttribute:inRange:options:usingBlock)を使います。
この二つのメソッドは同じ属性の範囲を順番に返してくれますので、同じ属性の物に対して次々と処理を行う場合に便利です。

サブクラス化の注意