2017-04-20 3 views
0

私にはNSTableViewがあり、各行にはボタンが含まれています。テーブルに関連付けられたメニューもあります。NSButtonからのNSEvent

問題は次のとおりです。ボタンをクリックするとメニューが表示されます。可能であれば、右クリックで表示しないでください。

アクションメソッドは次のとおりです。ここで

- (IBAction)showMenu:(NSButton *)button { 
    NSLog(@"show menu"); 
    NSMenu *menu = [self.tableView menu]; 
    NSEvent *event = [[NSEvent alloc] init]; 


    [NSMenu popUpContextMenu:menu 
        withEvent:event 
        forView:button]; 

} 

eventをどうしますか? nilを使用した場合、メニューはボタンの隣ではなく、左下隅に表示されます。

ガイダンスをいただければ幸いです。

+0

現在のイベントを取得することができます: '[NSApp currentEvent]'。プルダウンモードで 'NSPopupButton'を使うことを検討してください。 – Willeke

答えて

0

-[NSMenu popUpMenuPositioningItem:atLocation:inView:]を試してみることができます。このメソッドは引数NSEventを使用しません。代わりに、ビューの座標系のビューと位置を与え、メニューはその位置(またはその項目の1つ)をその位置に配置します。

しかし、NSButtonはまったく使用しないことをお勧めします。 NSPopUpButtonを代わりに使用すると、左クリックの正しい位置にメニューが表示されます。

+0

ありがとうRob、私の要件は、私は変更できないNSButton(UI)デザインを使用することです。しかし、私はあなたが言及したものと非常に似通っています。 ' - (IBAction)showMenu:(NSButton *)ボタン{ NSMenu * menu = self.tableView.menu; NSPointポイント= NSMakePoint(-menu.size.width、0); [menu popUpMenuPositioningItem:[menu itemAtIndex:0] atLocation:point inView:button]; } ' –

関連する問題