3

ボタンのマウスダウンにポップアップメニューを表示しようとしています。ボタンは、マウスを押している間は押されているように見え、マウスを上に向けると、選択されているメニュー項目に関係なく「押されていない」状態になります。アプリケーションを追加するための[公開/スペース設定]パネルの[+]ボタンに似ています。

これまでに3つの方法を試しました。

  1. ボタンがクリックされたときにアクションを送信しました。ただし、ここでは、ポップアップメニューがマウスダウンではなくマウスアップに表示されます

  2. NSButtonをサブクラス化し、mouseDownを上書きします。ポップアップメニューがマウスダウンで表示され、任意のメニュー項目を選択できます。しかし、ポップアップメニューがなくなると、ボタンが押されたように見えました。したがって、同じアクションを再度実行する前に、もう一度クリックしてボタンを「押さない」ようにする必要があります。

  3. NSEventaddLocalMonitorForEventsMatchingMask。2と同様の動作。

なにか提案を?方法2または3が正しい方法だと思います。マウスを上に向けて、ボタンを「押すのをやめる」必要があります。

4

3 に答える 3

13

かなり古いスレッド。しかし、それは私が最近直面した問題なので、私が貢献することを許可されれば...

私の場合、NSPopupButtonを使用することはできませんでした。NSPopupButtonは、私が必要としない独自のNSMenuを作成するためです(そして、それをなくす方法がわかりません)。

そして、私は別の方法を見つけました。サブクラス化せずにデフォルトのNSButtonの動作を変更する可能性があります。-sendActionOn:NSControlクラスのメソッド(のどこか-awakeFromNib)を使用するだけです。

[_myButton sendActionOn:NSEventMaskLeftMouseDown];

これで、ボタンからのアクションがmouseDownイベントで送信されます。お役に立てれば。

于 2013-03-07T11:05:06.143 に答える
4

Peterが述べたように、NSPopUpButtonを使用できます。明らかではないのは、NSButtonの場合と同じように、ボタンのスタイル、画像、タイトルなどを構成できることです。

于 2010-09-06T22:20:20.777 に答える
3

Swift「構文」

myButton.sendAction(on: .leftMouseDown)

または:

サブクラスNSButton:

class ButtonDown: NSButton {
    override func awakeFromNib() {
        super.awakeFromNib()

        self.sendAction(on: .leftMouseDown)
    }
}
于 2018-01-23T21:26:43.837 に答える