0

NSOutlineView の右クリックでコンテキスト メニューを表示するには、サブクラス化してオーバーライドする必要があります。

- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
    NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    id item = [self itemAtRow: [self rowAtPoint:pt]];

    // Only the delegate knows how to create a menu based on the item
    return [self createMenuFor: item]; 
}

では、デリゲートにここでメニューを作成させ、メニュー アクションを処理させる適切な方法は何でしょうか?

編集 - サブクラスはメニューの作成方法を知らないので、これを行いました。大丈夫ですか?デリゲートとオンラインで通信する方法のサンプルコードは見当たりませんでした。

    return [[self delegate] createMenuForItem:item]; 

そして明らかに、NSMenu を返すメソッドをアウトライン ビュー デリゲートで定義しました。

4

1 に答える 1

1

まず、 を除くすべてのイベントに対して super を呼び出す必要があります([theEvent type] == NSRightMouseDown)。これがあなたの問題かどうかはわかりませんが、始めるには良い場所です。

次に、これはデリゲート メソッドではないため、デリゲートの接続とは関係ありません。無視しても問題ありません。

第 3 に、 Interface Builder でアウトライン ビューのクラス名をサブクラス (上記を実装したサブクラス) のクラス名に設定した、または (コードで作成した場合) 新しいサブクラスをコードで指定したか?

于 2013-03-28T19:33:14.577 に答える