1

Я пытаюсь решить простую проблему расширения только корневого элемента в моем NSOutlineView, но не повезло. Я могу расширить все элементы и выбранные элементы, но, похоже, не могу понять, как точно определить, как расширить только корневой узел. В outlineview показано дерево папок, и я хочу показать папки, доступные только под корневой папкой, но я не хочу расширять папки.Развернуть только корневой узел в NSOutlineView

В настоящее время я пытаюсь установить selectionIndexPath моего NSTreeController, а затем расширить выбор в outlineview:

NSIndexPath *indexPath; 
NSUInteger section = [indexPath indexAtPosition:0]; 
NSIndexPath *ip = [NSIndexPath indexPathWithIndex:section]; 
[outlineView collapseItem:nil collapseChildren:YES]; 

[self.treeController setSelectionIndexPath:ip]; 
[outlineView expandItem:[self.treeController selectionIndexPath]]; 

Это не работает. Предложения о том, как я могу правильно решить это, очень ценятся.

Cheers, Тронд

Решение: Следующая комбинация того, что я уже и @PaulPatterson предложение отлично работает:

[outlineView collapseItem:nil collapseChildren:YES]; 
NSIndexPath *indexPath; 
NSUInteger section = [indexPath indexAtPosition:0]; 
NSIndexPath *ip = [NSIndexPath indexPathWithIndex:section]; 
[outlineView collapseItem:nil collapseChildren:YES]; 

[self.treeController setSelectionIndexPath:ip]; 
id node = [[self.treeController selectedNodes] firstObject]; 
[outlineView expandItem:node]; 

ответ

1

ли проблема несоответствие между значением ожидается [-NSOutlineView expandItem:] и значение, возвращаемое [-NSTreeController selectionIndexPath]?

В его нынешнем виде вы проходите мимо NSIndexPath экземпляра до expandItem:. Я ценю, что expandItem: агностик о конкретном классе, который он ожидает в качестве аргумента (документы указывают, что он принимает любой объект - id), но мой опыт в том, что он хочет объект node - тип объекта, содержащегося в массиве, возвращаемом [-NSTreeController selectedNodes] , Попробуйте следующее:

if ([[self.treeController selectedNodes] count] == 1) { 
    id node = [[self.treeController selectedNodes] firstObject]; 
    [outlineView expandItem:node]; 
} 
+0

Спасибо за вашу дальнейшую помощь по моим вопросам NSOutlineView! –

Смежные вопросы