LoginSignup
1
0

[macApp] NSTextView にデフォルトのタブストップを設定する

Posted at

はじめに

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

おわりに

何年か解決できなかったタブコードの改行問題が、偶然とはいえ、今回解決してよかった。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0