4

1NSTableViewつの列にNSPopUpButtonCellsが含まれているものがあります。この列はに割り当てられますIBOutlet。私のアプリケーションのコントローラークラスは、その中にメニューを作成し、それをのdataCellにinit割り当てます。これはです。NSTableColumnNSPopUpButtonCell

メニューは次のようになります。

NSPopUpButton
    NSMenu
        NSMenuItem item1
        NSMenuItem item2
        NSMenuItem item3
            NSMenu
                NSMenuItem item3_1
                NSMenuItem item3_2
        NSMenuItem item4
                NSMenuItem item4_1
                NSMenuItem item4_2
                NSMenuItem item4_3

メニューをクリックしてitem1またはitem2を選択すると、データソースtableView:setObjectValue:forTableColumn:row:が起動され、objectValueが0または1になり、選択したアイテムのインデックスになります。ただし、サブメニューの1つから項目を選択すると、取得するobjectValueは-1になります。選択したメニュー項目を取得するにはどうすればよいですか?

4

2 に答える 2

1

メニューとサブメニューの複雑なセットがある場合、-tableView:setObjectValue:forTableColumn:row:に依存するとは思いません。私が正しく思い出せば、サブメニューが機能するときにメニュー項目のマッピングへの「オブジェクト値」は実際にはありません-NSMenuは古すぎて、希望するようにNSIndexPathを使用できず、整数をメニューにマッピングしようとするほど複雑ではありませんおよびサブメニュー。(さらに、メニューは動的に大きく変化する傾向があるため、「3」の意味はかなり不自然になります。)

NSMenuItems(または場合によっては親NSMenus)にターゲットとアクションを設定して、それぞれが選択されたときに信頼できることを実行します。

于 2011-03-18T18:26:09.147 に答える
0

アイテム1と2を取得するのと同じコードを使用していますか?あなたはそうだと思いますが、時々これらのことは簡単に見落とされます= /

于 2011-02-20T09:03:02.833 に答える