如何编辑NSOutlineView项目

时间:2013-10-05 16:50:41

标签: cocoa cocoa-bindings nsoutlineview nstreecontroller

我有一个使用NSTreeController的Outlineview,大部分内容都按照我的意愿运行,除非添加新项目,我希望自动选择项目进行编辑。在过去使用NSTableview时,我会确定项目所在的行并使用函数

- (void)editColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex withEvent:(NSEvent *)theEvent select:(BOOL)flag

然而,由于NSOutlineView使用NSindexPath,我正在努力完成 这样,有一个函数可用于传递NSIndex路径而不是一行来实现相同的结果。或者我应该为NSOutlineView采用不同的方法。

2 个答案:

答案 0 :(得分:3)

你应该可以在NSOutlineView上调用editColumn:row:withEvent:select:

[outlineView editColumn:0 row:editRowIndex withEvent:nil select:YES];

虽然这是来自NSTableView的方法,NSOutlineViewNSTableView的子类,因此您也可以在大纲视图中调用它。

答案 1 :(得分:1)

原来我的问题与addChild方法有关,addChild的文档表明以下内容;

  

特别注意事项

     

从OS X v10.4开始,推迟使用此方法的结果   直到runloop的下一次迭代才能产生错误   演示机制可以作为一张表提供反馈。

所以,我添加了以下内容,并使用相应的选择器

[self performSelector:@selector(editNewSector:) withObject:nil afterDelay:0];

现在一切似乎都在运作,我的代码在下面

- (IBAction)addChildSector:(id)sender
{
    [[self myTreeController] addChild:sender];
    [self performSelector:@selector(editNewSector:) withObject:nil afterDelay:0];
}

- (IBAction)editNewSector:(id)sender
{
    NSTreeNode *nodeSector = [[self myOutlineView]
                                   itemAtRow:[[self myOutlineView] selectedRow]];

    NSInteger row = [[self myOutlineView] rowForItem:nodeSector];
    [[self myOutlineView] editColumn:0 row:row withEvent:nil select:YES];
}