我一直在尝试编辑和更新源列表NSOutlineView中的项目失败,我没有使用树控件但是使用数据源和委托。
我的理解是outlineView:setObjectValue:forTableColumn:byItem数据源方法适用于基于单元格的outlineviews,并且不会基于视图调用。
在NSTableView的具有类似的数据源的方法的tableView:setObjectValue:forTableColumn:行,但是这一次的文档指出它是基于细胞表和“与其目标/动作用于在视图中小区中的每个项目。”
所以,我不确定如何做到这一点,我尝试了下面的文本域委托方法;
- (void)controlTextDidBeginEditing:(NSNotification *)aNotification
{
selectedRowList = [[self outlineView] selectedRow];
}
- (void)controlTextDidEndEditing:(NSNotification *)aNotification
{
NSManagedObject *selectedGoal = [[self outlineView] itemAtRow:selectedRowList];
NSTableCellView *viewCell = [[self outlineView] makeViewWithIdentifier:@"DataCell" owner:self];
[selectedGoal setValue:[[viewCell textField] stringValue] forKey:@"goalName"];
[self updateOutlineView];
}
我可以更改文本字段值,但是我似乎无法从视图中获取此值。我认为问题是行不再被选中一次 - (void)controlTextDidEndEditing :( NSNotification *)aNotification被执行。
有人能指出我如何最好地处理更新NSOutlineView项目的方向吗?
由于
答案 0 :(得分:2)
我在基于NSOutlineView的视图中遇到了同样的问题,我用controlTextDidChange:
来获取更新:
- (void)controlTextDidChange:(NSNotification *)notification {
NSTextField *textField = [notification object];
NSTableRowView *parentRow = (NSTableRowView*)[[textField superview] superview];
NSInteger row = [self.outlineView rowForView:parentRow];
//..
}