NSOutlineView - автоматическое расширение всех узлов - PullRequest
25 голосов
/ 06 февраля 2009

У меня есть NSOutlineView, привязанный к NSTreeController (если это имеет значение), и я хотел бы расширить каждый узел в моем -awakeFromNib().

Я также хотел бы программно выбрать первого потомка первого узла одновременно. Подобные вещи просты с табличными представлениями, но контуры вообще не взаимодействуют со мной.

Спасибо

Rich

Ответы [ 2 ]

64 голосов
/ 06 февраля 2009

Я бы хотел расширить каждый узел в моем -awakeFromNib ().

Начиная с Mac OS X 10.5, [outlineView expandItem:nil expandChildren:YES].

В предыдущих версиях Mac OS X вам нужно было выполнить итерацию от 0 до количества строк, получить элемент для каждой строки с помощью [outlineView itemAtRow:row] и сохранить эти элементы в массиве, затем выполнить итерацию массива и передать каждый элемент к методу expandItem:expandChildren:. (Вы не можете смешать два цикла, потому что расширение элемента и всех его потомков изменит индексы строк его последующих братьев и сестер; следовательно, сначала вы должны собрать все элементы верхнего уровня, а затем развернуть их, как только у вас будут все. ) * +1010 *

Я также хотел бы программно выбрать первого потомка первого узла одновременно.

Сразу после вышесказанного будет строка 1.

Контурное представление является разновидностью табличного представления, поэтому вы будете использовать один из методов NSTableView: [outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:1] byExtendingSelection:NO].

0 голосов
/ 23 октября 2014

Если вы загружаете из источника данных,

dispatch_async(dispatch_get_main_queue(), ^{
  [self.outlineView expandItem:root expandChildren:YES];
});
...