2011-01-19 14 views

cevap

0

Veri kaynağımı anahat için bir NSIndexPath döndürecek şekilde değiştirdimView: child: ofItem :. Bu şekilde NSIndexPath'i almak için [anahat görünümü rowAtPoint: point] (ve benzeri) kullanabilirim.

Bu değişiklik, bu indexPath'ların bir setini yapmamı gerektirdi, böylece onlara gerek kalmayana kadar yayınlanmayacaklardı. Ayrıca, normalde bir model nesnesi beklenen diğer tüm kodlar artık model nesnesini dizin yolundan aramaya ihtiyaç duyar. Benim durumumda bu verimli oldu. aralığında

NSScrollView* scrollView = [self.tableView enclosingScrollView]; 

CGRect visibleRect = scrollView.contentView.visibleRect; 

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

ilk görünen hücresi olarak yerini alacak ve uzunluğu hücrelerin miktarı böylece görünür hücrelerin endeksi bilebilir gösterilmiştir:

+0

Yine de bir indexPathsForVisibleRows eşdeğeri olsaydı. – Cal

13

NSOutlineView bir NSTableView alt sınıfıdır (NSArray *) indexPathsForVisibleRows -

[DÜZENLE] Ne Aslında arıyorum CocoaTouch/UITableView bir NSOutlineView eşdeğerdir. Bu nedenle -rowsInRect:, -visibleRect (NSView'dan) ile birleştirilebilir. Seviyeyi belirlemek için -levelForRow: kullanın.

+0

numarayı satır kadar saymak için bir model yineleme olurdu gibi görünüyor. Doğrusal zamanı gerçekten istemiyorum .... Bir şey özlemediğim sürece? – Cal

+0

Ne demek istediğinden emin değilim. Satırları gerçek nesnelerine itemForRow :, vb aracılığıyla çevirebilirsiniz. –

+0

Üzgünüm ... Sorumu yeterince ayrıntılı değildi. Görünür satırlar için bir ağaç koordinatını alabilmek istiyorum. Örneğin benim durumumda ağacın iki seviyesi vardır, bu yüzden yaprak düğümleri için iki endekse sahip olur. – Cal

22

aşağıdakileri yapabilirsiniz .

+1

Harika cevap! Ve sonra [self.tableView itemAtRow: range.location] üzerinde yineleyin – stevesliva

+0

Kaydırma görünümünün gereksiz katılımının yanı sıra yaklaşık iki buçuk yıl önce gönderdiğim cevaptan farklı bir şey olup olmadığından emin olun (bir görünüm sorabilirsiniz) doğrudan '-visibleRect' için) ve OP bir anahat görünümü (ağaç) hakkında bir tablo (liste) soruyor olması gerçeği ... –

+2

@JoshuaNozzi kodu okumak daha kolay –

0

3 Swift yılında:

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 
}