1

我有一个使用 NSTreeController 的 Outlineview,在大多数情况下,除了添加新项目时,一切都按我的意愿运行,我希望自动选择项目进行编辑。在过去使用 NSTableview 时,我会确定项目所在的行并使用该函数

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

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

4

2 回答 2

3

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

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

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

于 2013-10-05T23:03:02.807 回答
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];
}
于 2013-10-06T13:22:48.470 回答