NSOutlineView için görünür satırların dizinlerini nasıl edinebilirsiniz? Hangi seviyenin ve hangi satırların görünür olduğunu bilmem gerekiyor.NSOutlineView için görünen satırların dizinlerini nasıl alabilirim?
cevap
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:
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.
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
Ne demek istediğinden emin değilim. Satırları gerçek nesnelerine itemForRow :, vb aracılığıyla çevirebilirsiniz. –
Ü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
aşağıdakileri yapabilirsiniz .
Harika cevap! Ve sonra [self.tableView itemAtRow: range.location] üzerinde yineleyin – stevesliva
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 ... –
@JoshuaNozzi kodu okumak daha kolay –
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
}
Yine de bir indexPathsForVisibleRows eşdeğeri olsaydı. – Cal