2011-01-19 6 views

答えて

0

データソースを変更して、outlineView:child:ofItem:のNSIndexPathを返しました。 この方法で、[outlineview rowAtPoint:point](同様の)を使用してNSIndexPathを取得できます。

この変更により、これらのindexPathが必要なくなるまで解放されないように、これらのindexPathを作成する必要がありました。また、モデルオブジェクトを通常想定していた他のコードはすべて、インデックスパスからモデルオブジェクトをルックアップする必要があります。私の場合、これは効率的でした。

+0

indexPathsForVisibleRowsに相当するものが存在することを望みます。 – Cal

13

NSOutlineViewNSTableViewサブクラスである(NSArrayの*)indexPathsForVisibleRows -

[EDIT] は、私が実際に探していることはCocoaTouch /のUITableViewにNSOutlineViewと同等です。したがって、-rowsInRect:は、-visibleRectNSView)と組み合わせることができます。レベルを決定するには-levelForRow:を使用してください。

+0

あなたが番号を行にカウントアップするためにモデルを反復しなければならないように思えます。私は本当に直線的な時間を望んでいない....私は何かが不足していない限り? – Cal

+0

あなたは何を意味するのか分かりません。あなたはitemForRow:などで行を実際のオブジェクトに変換できます。 –

+0

申し訳ありません...私の質問は詳細ではありませんでした。私は実際に可視の行のためのツリー座標を得ることができるようにしたい。たとえば、私の場合、ツリーは2つのレベルを持っているので、リーフノードに2つのインデックスがあります。 – Cal

22

次の操作を実行できます。

細胞の量が表示されている最初の可視セルとして及び長さにあなたが可視セルのインデックスを知ることができるので、あなたが場所を取得します範囲の
NSScrollView* scrollView = [self.tableView enclosingScrollView]; 

CGRect visibleRect = scrollView.contentView.visibleRect; 

NSRange range = [self.tableView rowsInRect:visibleRect]; 

+1

すばらしい答え!それから、[self.tableView itemAtRow:range.location]を反復処理します。 – stevesliva

+0

これはスクロールビューの不要な関与を除いて、私が2年半前に投稿した回答とどのように違うのかよくわかりませんその '-visibleRect'のために直接)、そしてOPがアウトラインビュー(ツリー)対テーブル(リスト)について質問しているという事実... –

+2

@JoshuaNozziはコードを読みやすく –

0

3スウィフトで:

let rows = IndexSet(integersIn: 0..<outlineView.numberOfRows) 
let rowViews = rows.flatMap { outlineView.rowView(atRow: $0, makeIfNecessary: false) as? TimelineRowView } 

for rowView in rowViews 
    //iterate over rows 
} 
関連する問題