更新NSOutlineView项目

时间:2013-05-23 21:49:39

标签: cocoa nstableview nsoutlineview

我一直在尝试编辑和更新源列表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项目的方向吗?

由于

1 个答案:

答案 0 :(得分:2)

我在基于NSOutlineView的视图中遇到了同样的问题,我用controlTextDidChange:来获取更新:

- (void)controlTextDidChange:(NSNotification *)notification {
    NSTextField *textField = [notification object];
    NSTableRowView *parentRow = (NSTableRowView*)[[textField superview] superview];
    NSInteger row = [self.outlineView rowForView:parentRow];

    //..
}