最初に私は長さをお詫びしますが、十分な情報が得られるようにしたいと思います。本当に難しいべきではない面白い問題があります。委任を使用しての賛成で新しいエントリにスクロールするNSOutlineViewを取得する
NSInteger row = [self.myOutlineView rowForItem:myItem];
[self.myOutlineView scrollRowToVisible:row];
私はNSTreeControllerを使用していない:私はあなたにNSOutlineViewスクロールを持ちたいと特定の行を表示したい場合は、単にこのパターンを使用することを知っています。
アダプターパターンクラスを使用してデータとして使用しています。アダプターはいくつかの異なるタイプをラップします。それはシンプルな構造ですので、アダプターは子数を扱うの世話を
[アダプタの子供たち] ----- * [アダプターの親]
、追加することができます削除することができ、拡張することができ、などまた、データ転送オブジェクトのように動作します。
ここではすべての方法でそれが問題の要点です。 NSOutlineViewに新しい項目を追加するときは、アウトラインビューで選択されたアダプタに新しい子アダプタを追加することから始めます。
[self.myOutlineView reloadItem:selectedAdapter reloadChildren:YES];
私はこのオブジェクトのビューを表示し、選択された行が新たに表示されたビューに関連するようNSOutlineViewを同期しようとする:私は使用して子供を持つアイテムをリロード。だから、手順がある単純な方法で:
- 最初のデータがNSOutlineDataSourceプロトコルを利用してNSOutlineViewをロード
- ユーザは「追加」ボタンをクリックする子項目を追加することができますアイテム(アダプタ)
- を選択 新しい表現オブジェクトが新しく作成されたアダプターを選択したアダプタの子どもに追加されたアダプタ
- に包まれて
- A新しい空の表現オブジェクトが作成されます
- 新しいビューは、新しい表現オブジェクトを使用して作成され、選択された(親)ノードとその子供がNSOutlineViewで新たに作成された行がビューを同期する表示するためにスクロールさNSOutlineView
- にリロードさ
- を表示およびNSOutlineViewの選択
ここに問題があります。 rowForItemメソッドを使用すると、NSOutlineViewは新しく追加されたアイテムを見つけられません。しかし、私がリロードした後、私は親ノードを拡張し、新しく追加されたアイテムを選択することができ、すべて正常に動作します。問題を修正しようとすると、親ノードをプログラムで展開し(新しい項目を公開する)、新しい項目にスクロールしようとしますが、それでも行は見つかりません。 rowForItemは-1を返します。
私はNSOutlineViewで何かを更新していない新しい項目を追加するときに何かを忘れましたか?私は成功せずに多くの異なることを試してきました、そして、どんな助けも大いに感謝されるでしょう。事前に
おかげで、 ロブ