LoginSignup
6
5

More than 5 years have passed since last update.

borderless な NSWindow でテキスト入力を有効化する

Posted at

1時間くらいハマった上に,日本語情報としてはまだないようなので,メモを残します.

NSWindow は,以下のようにスタイルを設定することで borderless,すなわち,タイトルバー等を除去することができます.

let window = NSWindow()

window.styleMask = [.borderless]

しかし,borderless な NSWindow に対しては,デフォルトでキー操作が無効になってしまうようです.すなわち,そのような NSWindow 上に NSTextField 等の入力可能な要素を配置しても,キー入力を受け付けないために,編集できません.

By default, borderless windows cannot become key.
objective c - NSTextField not editable in custom NSWindow - Stack Overflow

公式にも記述がありました.

The value of this property is true if the window has a title bar or a resize bar, or false otherwise.
canBecomeKey - NSWindow | Apple Developer Documentation

これを解決するためには,NSWindow クラスを継承したクラス内で,canBecomeKey プロパティを true に設定する必要があります.先ほどの参照先は Objective-C のコードですが,Swift では以下のように記述できます.

class PPWindow: NSWindow {

    override var canBecomeKeyWindow: Bool {
        return true
    }
}

xcode - How to set canBecomeKeyWindow? - Stack Overflow

以上です.

6
5
1

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
6
5