Гетерогенный NSTreeController - PullRequest
       9

Гетерогенный NSTreeController

2 голосов
/ 02 апреля 2010

У меня есть NSTreeController (поставка контента для NSOutlineView).Я хотел бы, чтобы объекты верхнего уровня принадлежали одному классу, а все другие объекты (то есть дети любого уровня) принадлежали к другому.Какой лучший способ это сделать?

Мне нужно как-то изменить поведение, по крайней мере, add, addChild, insert и insertChild, я полагаю.Однако я надеялся найти простой способ объяснить это только в одном месте, а не менять четыре отдельных метода.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2010

Это сработало, и мне не пришлось переписывать какие-либо функции:

- (void)insertChild:(id)sender
{
    if ([self selectionIndexPath])
    {
        [self setObjectClass:[IRGroup class]];
        [super insertChild:sender];
    }
    else
    {
        [self setObjectClass:[IRFloor class]];
        [super insertChild:sender];
    }
}

Это было нелегко; Я попытался переопределить newObject, потому что документы Apple утверждают, что он вызывается при вставке дочерних элементов и дочерних элементов, но мое тестирование показывает, что при вставке дочерних элементов вызывается only .

0 голосов
/ 03 апреля 2010

Мне кажется, что вы можете просто создать атрибут в ваших объектах, чтобы различать, какие объекты должны использовать ваши измененные методы, а какие нет. Затем просто поместите простой оператор if для проверки этого атрибута в подклассовых методах. Если ваш объект не имеет атрибута, то пусть контроллер дерева суперкласса обрабатывает его, иначе ваше измененное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...