Interface Builder の NSTextView で NSLayoutManager を置き換える
Cocoa の NSLayoutManager
や NSTypesetter
をサブクラス化したい場合、Apple のドキュメント “Assembling the Text System by Hand” にあるように、マニュアルで NSTextView
を構築してもいいが面倒だ。それに、このままではスクロールビューでデコレートもされてないのでノーグッド。
どうせなら、Interface Builder で配置した NSTextView
の NSLayoutManager
を置き換えるのが手っ取り早いだろう。コードは以下のようになる。
- (void) awakeFromNib {
_textStorage = [[NSTextStorage alloc] initWithString:@"Cocoa Programming Topics"];
NSLayoutManager *layoutManager = [[MyLayoutManager alloc] init];
[_textStorage addLayoutManager:layoutManager];
[layoutManager release];
** NSTextContainer *textContainer = [_textView textContainer];
[layoutManager addTextContainer:textContainer];
[textContainer replaceLayoutManager:layoutManager];
**}
肝になるのは NSLayoutManager
の addTextContainer:
で元々の NSTextContainer
を追加したあとに、NSTextContainer
の replaceLayoutManager:
を呼ぶこと。これで NSLayoutManager
を置き換えられる。