0

NSPopUpButtonCellテーブル ビューがバインディングとNSArrayController.

ポップアップ ボタン セルは作成されますが、ポップアップ ボタン セルのsetMenuItem:itemメソッドをオーバーライドしてアウトレットにアクセスしようとすると、 nil.
これは予想される動作ですか..?
作成時にメニューを置き換えるために別の方法を使用する必要がありますか?

NSWindowController基本的に、そのドキュメント ウィンドウのコントローラー ( ) にリンクするアウトレットが必要ですNSPopUpButtonCell。これにより、カスタム ポップアップ ボタンが表示されたときにメニューをカスタマイズすることができます。

バインディングを使用したソリューションはさらに優れていますが、オーバーライドsetObjectValue:すると、パラメーターで呼び出されることは決してないことがわかります。ただしnil、ストックを使用するNSPopUpButtonCellと、適切に入力されたポップアップ メニューが表示されます。
( setObjectValue:nil のみが呼び出されたときに NSPopUpButtonCell が正しく表示される理由も参照してください)。

4

1 に答える 1

1

NSTableView 列に NSPopUpButtonCell を設定するために何もオーバーライドする必要はありません。知っておくべきことは、セル自体ではなく、NSTableColumn にバインディングを設定することです。通常、ポップアップのすべてのオプションを含む NSArray にバインドされた xib に NSArrayController があり、ポップアップ セルを含む列を選択して、そのバインディングに移動します。このスクリーンショットのように (右側のインスペクターにコンテンツ、コンテンツ オブジェクト、および選択されたオブジェクトのバインディングが表示されていることに注意してください):

ポップアップ セル列の NSTableColumn バインディングを示す Xcode のスクリーンショット

実際の例が必要な場合は、別の StackOverflow の質問のために作成したこのプロジェクトをチェックしてください。NSPopUpButtonCell に NSAttributedStrings を使用させることに関連する無関係なものがたくさんありますが、xib のバインディングは、NSTableColumn をバインディングによってオプションが入力されるポップアップにバインドする方法の実例を構成します。

于 2012-12-04T12:50:12.307 に答える