NSOutlineView — автоматическое развертывание всех узлов

StackOverflow https://stackoverflow.com/questions/519751

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

Спасибо,

Богатый

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

dispatch_async(dispatch_get_main_queue(), ^{
  [self.outlineView expandItem:root expandChildren:YES];
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top