NSOutlineView — автоматическое развертывание всех узлов
-
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];
});