LoginSignup
2
0

More than 5 years have passed since last update.

osX keyDownメソッド実行時にBeep音が鳴るようになった話

Last updated at Posted at 2018-05-16

状況

osX(macOS)向けアプリ開発でキーボード入力を受け付ける際、keyDown()などを用いると思います。

sample1.swift
import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override var representedObject: Any? {
        didSet {
        }
    }

    override var acceptsFirstResponder: Bool {
        return true
    }

    override func keyDown(with event: NSEvent) {
        Swift.print(event.keyCode)
    }

}

今まではこんな感じでNSViewControllerのサブクラスでkeyDown()を実装すればよかったのですが、なぜか最近作ったプロジェクトだとBeep音が鳴るようになってしまいました。

とりあえずの解決策

Beep音を鳴らさないためには、NSViewのサブクラスでkeyDown()を実装すれば良いようです。

sample2.swift
class MyView: NSView {

    override func keyDown(with event: NSEvent) {
        Swift.print(event.keyCode)
    }

}

ぼやき

なぜNSViewControllerのサブクラスで実装するとダメなのか、わからないのですが、解決策を知っている方いましたら教えていただきたいです。

追記:解決策

テキストボックスやテキストエリアではないところにフォーカスが当たっている状態でのキー入力をする際、そのフォーカスが当たっているオブジェクトでacceptsFirstResponderをtrueにしないとBeep音がなってしまうようです.
なので、Beep音を鳴らさないためには、フォーカスをコントロールするか、デフォルトでフォーカスが当たるオブジェクトで

override var acceptsFirstResponder: Bool {
    return true
}

と記述しておけばいいようです。

2
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
2
0