NSTreeController: пользовательское поведение для привязки canInsert - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть приложение Какао с NSOutlineView, управляемым NSTreeController.

Кроме того, есть кнопка для добавления новых элементов в контурный вид. Я связал флаг enabled кнопки со свойством canInsert контроллера дерева.

Я хочу разрешить добавление до 5 элементов в контурный вид. После этого canInsert должен вернуть NO.

Я создал свой собственный подкласс NSTreeController и переписал canInsert, но включенный статус кнопки не изменился, потому что он не понимает, что контроллер дерева изменился при добавлении элементов.

Я также реализовал: keyPathsForValuesAffectingCanInsert и попытался вернуть различные свойства, такие как content, arrangedObjects, но здесь не повезло.

@implementation ILCustomTreeController

- (BOOL)canInsert
{
    return [[self arrangedObjects] count] < 5;
}

+ (NSSet *)keyPathsForValuesAffectingCanInsert
{
    return [NSSet setWithObject:@"content"]; // I also tried 'arrangedObjects'
}

@end

1 Ответ

0 голосов
/ 19 декабря 2011

Вот обходной путь, который работает (хотя я все еще думаю, что это должно быть решено с помощью keyPathForValuesAffectingCanInsert).Предложения приветствуются.

@implementation ILCustomTreeController

- (BOOL)canInsert
{    
    return [[self arrangedObjects] count] <= 4;
}

- (void)addObject:(id)object
{
    [self willChangeValueForKey:@"canInsert"];
    [super addObject:object];
    [self didChangeValueForKey:@"canInsert"];
}

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath
{
    [self willChangeValueForKey:@"canInsert"];
    [super insertObject:object atArrangedObjectIndexPath:indexPath];
    [self didChangeValueForKey:@"canInsert"];
}

- (void)remove:(id)sender
{
    [self willChangeValueForKey:@"canInsert"];
    [super remove:sender];
    [self didChangeValueForKey:@"canInsert"];    
}

@end
...