7

カスタムビューNSMenuを含む があります。NSMenuItemsAlt ボタンを押すと、メニュー項目の外観の一部が (ビューを通じて) 変わるようにしたいのです。ドキュメントで見つけましsetAlternativeたがNSMenuItem、実際にはNSMenuItemsカスタムビューなしでしか機能しませんでした。カスタム ビューを設定するとすぐに、すべてのメニュー項目が表示されます。また、メニューが開いている間にキープレスイベントを取得しようとしました。他の実行ループのためNSApplication's sendEvent:、メニューが閉じられるまでイベントを受け取りません。したがって、入ってくるイベントを傍受することはできません。

メニューが開いているときに Alt キーが押されたときに、委譲またはサブクラス化によって通知を受け取る方法を知っている人はいますか?

4

1 に答える 1

6

メニューのデリゲートとしてオブジェクトを設定してから、デリゲートメソッドを実装する必要があります-menu:updateItem:atIndex:shouldCancel:

これにより、現在の修飾子の状態に基づいて、メニュー項目が表示される前にカスタムビューの状態を変更できます。

を要求することにより、現在の修飾子を取得できます[[NSApp currentEvent] modifierFlags]

メニューを開いているときに修飾子フラグが変更された場合に通知を受け取る必要がある場合は-flagsChanged:、カスタムビューにメソッドを実装します。

- (void)flagsChanged:(NSEvent*)event
{
    if ([event modifierFlags] & NSAlternateKeyMask)  // check for option key
    {
        //do something
    }
    else
    {
        //do something else
    }
}
于 2010-04-10T04:12:37.867 に答える