はじめに
NSTextView
を使用して、簡易的なテキストビューアを作り活用しているが、なぜか タブコードが入ると、予期しない改行が発生する。
しかし、偶然に タブストップの未設定が原因と判明した。
今回は、NSTextView
にデフォルトのタブストップを設定する方法をまとめておく。
タブストップの設定方法
$\frac{1}{2}$インチごとにタブストップを設定するコードは以下の通り。
(1インチ = 72ピクセル)
let style = NSMutableParagraphStyle()
style.defaultTabInterval = 36.0 // 1/2 inch
style.tabStops = []
textView.defaultParagraphStyle = style
let attrs = [NSAttributedString.Key.paragraphStyle: style]
textView.typingAttributes = attrs
このコードを実行すると、個々のプロパティで設定したフォントや文字色は機能しなくなる。このため、タブストップを設定する場合は、これらの属性も同時に設定する必要がある。
フォントと文字色も一緒に設定する
let style = NSMutableParagraphStyle()
style.defaultTabInterval = 36.0 // 1/2 inch
style.tabStops = []
textView.defaultParagraphStyle = style
let attrs = [NSAttributedString.Key.paragraphStyle: style,
NSAttributedString.Key.font: NSFont(name: "フォント名", size: フォントサイズ)!,
NSAttributedString.Key.foregroundColor: NSColor.textColor]
textView.typingAttributes = attrs
(必要に応じて、背景色等、他の属性も一緒に設定する)
タブストップを8文字分に設定する
等幅フォントを使用する場合は、タブストップをそのフォントサイズの8文字分とすると見栄えばよい。
その場合のコードは以下の通り。
let font = NSFont(name: "等幅フォント名", size: フォントサイズ)!
let attrString = NSAttributedString(string: "12345678", attributes: [NSAttributedString.Key.font: font])
let style = NSMutableParagraphStyle()
style.defaultTabInterval = attrString.size().width
style.tabStops = []
textView.defaultParagraphStyle = style
let attrs = [NSAttributedString.Key.paragraphStyle: style,
NSAttributedString.Key.font: font,
NSAttributedString.Key.foregroundColor: NSColor.textColor]
textView.typingAttributes = attrs
おわりに
何年か解決できなかったタブコードの改行問題が、偶然とはいえ、今回解決してよかった。