NSTextViewにて、特定範囲のテキスト文字色を取得する方法。
妙に難しかった。。

以下、NSTextViewのサブクラスで書く想定。


// 先頭5文字取るサンプルなので、5文字以上の場合のみ動作。
if (self.string.length >= 5) {
    // 文字列の装飾は、self.textStrageに入っている。ということで、self.textStrageから任意の範囲のNSAttributedStringを取得。
    // ↓では仮に0文字目から5文字分を取得。
    NSAttributedString *attributedString = [self.textStorage attributedSubstringFromRange:NSMakeRange(0, 5)];

    // 指定範囲の中に複数の装飾が含まれている場合もあるので、NSAttributedStringは配列構造になっている。
    // ということで、↓では仮にindex:0の装飾を取得。
    // ちなみに、参照渡しするeffectiveRangeには、指定したindexの文字装飾が影響を及ぼす範囲が入る。5文字のうち前半3文字だけ青色なら(0, 3)みたいな形。
    NSRange effectiveRange;
    NSDictionary *attributes = [attributedString attributesAtIndex:0 effectiveRange:&effectiveRange];

    // 文字色はNSColorのキーで格納されているので、取得してキャスト。
    NSColor *textColor = (NSColor *)[attributes objectForKey:@"NSColor"];

    // 他に、フォントと段組が取得可能。
    NSLog(@"%@", attributes);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Name *
Email *
Website

*