CPTreeController(卡布奇诺)

时间:2011-11-30 08:03:12

标签: cappuccino

在卡布奇诺中构建绑定兼容的大纲视图数据的最佳方法是什么?即一种CPTreeController

我的源代码当前是一个jSON对象(包含对象和数组),我想将它显示在大纲视图中,并且能够更改其参数/获得更改通知。 (一旦加载到CPTreeController中,我不需要将它序列化为jSON,我将直接使用数据源)

然后:

  • 是否有某个隐藏的CPTreeController或类似的lib可供使用?
  • 如果我重写自己的数据源,我应该从头开始编写它还是可以轻松地混合使用CPDictionaries和CPArrays来完成这项任务? (请记住它应该符合绑定)

1 个答案:

答案 0 :(得分:1)

通过消息来源搜索说没有隐藏的CPTreeController,因此您可以编写自己的CPTreeController实现并将其贡献给社区,也可以为特定模型实现数据源协议,如下所示:

- (int)outlineView:(CPOutlineView)theOutlineView numberOfChildrenOfItem:(id)theItem
{
    if (theItem == nil)
        theItem = rootNode;

    return [[theItem childNodes] count];
}

- (id)outlineView:(CPOutlineView)theOutlineView child:(int)theIndex ofItem:(id)theItem
{
    if (theItem == nil)
        theItem = rootNode;

    return [[theItem childNodes] objectAtIndex:theIndex];
}

- (BOOL)outlineView:(CPOutlineView)theOutlineView isItemExpandable:(id)theItem
{
    if (theItem == nil)
        theItem = rootNode;

    return [[theItem childNodes] count] > 0;
}

- (id)outlineView:(CPOutlineView)anOutlineView objectValueForTableColumn:(CPTableColumn)theColumn byItem:(id)theItem
{
    return [[theItem representedObject] valueForKey:"name"];
}