2011-01-19 4 views

risposta

0

Ho modificato la mia origine dati per restituire un NSIndexPath per outlineView: child: ofItem :. In questo modo potrei usare [outlineview rowAtPoint: point] (e simili) per ottenere NSIndexPath.

Questa modifica mi ha richiesto di creare un set di questi indexPath in modo che non vengano rilasciati finché non ne ho bisogno. Inoltre, tutto l'altro codice che normalmente si aspettava un oggetto modello ora deve cercare l'oggetto del modello dal percorso dell'indice. Nel mio caso questo è stato efficiente.

+0

Ancora vorrei che esistesse un indice indexPathsForVisibleRows. – Cal

13

NSOutlineView è un NSTableView sottoclasse. Pertanto -rowsInRect: può essere combinato con -visibleRect (da NSView). Utilizzare -levelForRow: per determinare il livello.

+0

Sembra che si dovrebbe iterare il modello di contare fino a remare numero. Non voglio davvero un tempo lineare ... A meno che non manchi qualcosa? – Cal

+0

Non sono sicuro di cosa intendi. Puoi tradurre le righe nei loro oggetti reali per itemForRow :, ecc. –

+0

Mi spiace ... La mia domanda non è stata sufficientemente dettagliata. In realtà voglio essere in grado di ottenere le coordinate di un albero per le righe visibili. Per esempio nel mio caso l'albero ha due livelli, quindi avrebbe due indici per i nodi foglia. – Cal

22

è possibile effettuare le seguenti operazioni:

NSScrollView* scrollView = [self.tableView enclosingScrollView]; 

CGRect visibleRect = scrollView.contentView.visibleRect; 

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

nella gamma si otterrà la posizione come la prima cella visibile e nella lunghezza la quantità di cellule vengono visualizzati in modo da poter conoscere l'indice delle celle visibili .

+1

Ottima risposta! E poi iterate su [self.tableView itemAtRow: range.location] – stevesliva

+0

Non so come questo sia diverso dalla risposta che ho postato quasi due anni e mezzo prima, a parte il coinvolgimento non necessario della vista di scorrimento (puoi chiedere una vista direttamente per il suo '-visibleRect') e il fatto che l'OP si interroghi su una vista struttura (albero) rispetto a una tabella (lista) ... –

+2

@JoshuaNozzi è più facile da leggere il codice –

0

In Swift 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 
} 
Problemi correlati