2013-10-05 74 views
1

我有一个使用NSTreeController的大纲视图,大多数情况下,一切正常,因为我想,除了添加新项目时,我想自动选择要编辑的项目。在过去使用NSTableView的时候我会确定的项目所在的行,使用功能如何编辑NSOutlineView项目

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

然而,由于NSOutlineView使用NSindexPath,我与如何实现这个 挣扎,所以有一个函数可以传递一个NSIndexpath而不是一行来获得相同的结果。或者我应该对NSOutlineView有不同的方法。

+0

你设置列在Interface Builder编辑?? –

+0

是的,我可以双击并编辑任何项目,这不是问题。我需要的是一种以编程方式启动的方式。 – Cory

+0

你有没有试过这种方法('editColumn:row:withEvent:select:'就是)从过去的经验看,似乎已经为我工作。 – Joshua

回答

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]; 
} 
+1

如果树控制器的'chooseInsertedObjects'为'NO',则可能会失败。不过,我不知道有更好的方式来获得新增加的物品。 –

+0

我做到了。它的工作正常,但我需要如何设置默认名称,如“untitle文件夹”。你能帮助我吗? – akk

2

你应该能够只是调用editColumn:row:withEvent:select:在NSOutlineView:

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

虽然这从NSTableView的方法,NSOutlineViewNSTableView一个子类,因此你也能调用它的大纲视图。

+2

你可以使用'rowForItem:'获得行索引。 –

+0

@PeterHosey我添加了一个答案,它给出了预期的结果。但仍然怀疑这是否是最好的方法。 – Cory