1

NSOutlineViewは2つの列を持つを使用しています。私dataSourceは、ファイルタイプを表すカスタムクラスのアイテムのツリーをアウトラインビューに提供します(つまり、UTIで初期化します)。最初の列は、ファイルタイプの表示名です(たとえば、「ソースコード」、「Interface BuilderNIBドキュメント」など)。2番目の列はNSPopUpButtonCell、ユーザーが特定のドキュメントタイプのハンドラーを選択できるようにするためのものです(Xcodeの[ファイルタイプ]設定ペインを考えてみてください。ほとんどそこにいます)。

ツリー内の特定のアイテムのを生成NSMenuし、UTIのLaunch Servicesデータベースエントリに基づいてオプションを入力し、関連するアプリケーションアイコンなどを追加することができます。実際、メニュー自体は素晴らしく機能し、を介して入力されますNSPopUpButtonCellWillPopUpNotification

問題は、私が思うに、メニューがポップアップされない-handlerNameときのセルには、空の文字列、またはセルのデフォルトのテキストのいずれかが常に含まれていることです。前者は、アイテムの結果の場合(列に割り当てられた属性)は非nilです。それ以外の場合は後者です。

さらに、私はインスタンスを手動で呼び出し-selectItem:ていNSPopUpButtonCellますが、これは間違っているようです。対照的に、左側の列は単なるNSTextFieldCell、すべてが正常に機能します(ただし、許可されている場合は、アイテムから値を読み取って表示するだけです)。

(免責事項:私はCocoa UIにかなり慣れていません。私は、Objective-Cや他の多くのプログラミング言語を知っていますが、Mac OS X UIの構築についてはあまり経験がないので、優しくしてください)。

4

1 に答える 1

1

私は OutlineViews と popUpButtons にも取り組んでいるので、これと他の多くの質問に対する答えを知りたいです。申し訳ありませんが、私は本当にあなたを助けることができませんが、1 つのことが私の目に留まりました:

ツリー内の特定のアイテムの NSMenu を生成できます

過去の曲がりくねった数週間で、私は 1 つのことを学びました: NSTreeController とデータソースを操作するときは、実際のオブジェクト (この場合は NSMenu) をpresentedObject として設定する NSTreeNodes を常に提供してください。

于 2011-04-05T09:26:04.387 に答える