2013-05-23 4 views
1

소스리스트 NSOutlineView에서 아이템을 편집하고 업데이트하려고 시도했지만, treecontroller를 사용하지 않고 데이터 소스와 델리게이트를 사용하고 있습니다.NSOutlineView 아이템 업데이트하기

내 이해는 outlineView : setObjectValue : forTableColumn : byItem 데이터 소스 메서드는 셀 기반 outlineviews에 적용되며 뷰 기반으로 호출되지 않습니다.

NSTableView는 tableView : setObjectValue : forTableColumn : row와 비슷한 데이터 소스 메서드를 가지고 있지만 이번에는 문서가 셀 기반 테이블이고 "대신 대상/작업이 뷰 셀의 각 항목에 사용되었습니다"라고 나와 있습니다.

그래서, 어떻게해야할지 모르겠다. 아래 텍스트 필드 위임 메서드를 시도했다.

- (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 항목 업데이트를 가장 잘 처리하는 방법에 대해 올바른 방향으로 나를 가리킬 수 있습니까?

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

    //.. 
}
:

감사

답변

2

은 내가 업데이트를 가져 controlTextDidChange:을 사용 NSOutlineView를 기반으로 내보기에서 같은 문제가 없었다