0

我有一个NSOutlineViewNSTreeController.

此外,还有一个用于向大纲视图添加新元素的按钮。我将按钮的标志绑定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
4

1 回答 1

0

这是一个可行的解决方法(尽管我仍然认为这应该通过使用来解决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
于 2011-12-19T07:30:04.217 回答