我有一个使用NSTreeController的Outlineview,大部分内容都按照我的意愿运行,除非添加新项目,我希望自动选择项目进行编辑。在过去使用NSTableview时,我会确定项目所在的行并使用函数
- (void)editColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex withEvent:(NSEvent *)theEvent select:(BOOL)flag
然而,由于NSOutlineView使用NSindexPath,我正在努力完成 这样,有一个函数可用于传递NSIndex路径而不是一行来实现相同的结果。或者我应该为NSOutlineView采用不同的方法。
答案 0 :(得分:3)
你应该可以在NSOutlineView上调用editColumn:row:withEvent:select:
:
[outlineView editColumn:0 row:editRowIndex withEvent:nil select:YES];
虽然这是来自NSTableView
的方法,NSOutlineView
是NSTableView
的子类,因此您也可以在大纲视图中调用它。
答案 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];
}