0

ポップアップメニューを実装しようとしています(Chromeでカーソルが左矢印の上にあるときにマウスの右ボタンを押すと表示されるもの)。

から派生したクラスがあり、からNSToolBarItem派生した別のクラスがありNSToolBarます。ツールバーでsetAllowsUserCustomization. そのため、ツールバーの任意の場所を右クリックすると、ツールバーのカスタマイズ メニューが表示されます。

あなたが与えることができる任意のポインタをありがとう.

4

2 に答える 2

2

サブクラス化する必要はありませんNSToolbarItem。1 つのツールバー項目に独自のビューを(コードまたは IB で) 与えるだけです。そのビューでは、 のような標準コントロールNSPopUpButton、または任意のイベント処理ロジックを備えたカスタム ビューを使用できます。

于 2014-08-04T05:08:11.327 に答える
0

NSToolbarItem カスタム ビューで mouseDown イベントを受信する場合は、次のパターンに従うことができます: カスタム NSWindow サブクラスを使用 (または-[NSWindow hitTest:]メソッドをスウィズル) し、イベントを自分でビューに転送します。

// MyWindow.h

@interface MyWindow : NSWindow

@end

@interface NSView (MyWindow)

- (BOOL)interceptsToolbarRightMouseDownEvents;

@end

// MyWindow.m

@implementation NSView (MyWindow)

- (BOOL)interceptsToolbarRightMouseDownEvents { // overload in your custom toolbar item view return YES
    return NO;
}

@end

@interface NSToolbarView : NSView /* this class is hidden in AppKit */ @end

@implementation MyWindow

- (void)sendEvent:(NSEvent*)event {
    if (event.type == NSRightMouseDown) {
        NSView* frameView = [self.contentView superview];
        NSView* view = [frameView hitTest:[frameView convertPoint:event.locationInWindow fromView:nil]];
        if ([view isKindOfClass:NSToolbarView.class])
            for (NSView* subview in view.subviews) {
                NSView* view = [subview hitTest:[subview convertPoint:event.locationInWindow fromView:nil]];
                if (view.interceptsToolbarRightMouseDownEvents)
                    return [view rightMouseDown:event];
            }
    }

    [super sendEvent:event];
}

@end
于 2015-05-31T14:22:13.743 に答える