私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の構築についてはあまり経験がないので、優しくしてください)。