Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

以上です.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away