2012-04-09 2 views
2

보기 기반 NSTableView을 사용할 때 선택한 행에 대한보기를 어떻게 변경합니까? 특히, 선택되지 않은 행에 대한 간단한 NSView 하위 클래스와 행 항목과 연결된 더 많은 정보를 편집 할 수있는 선택된 행에 대한보다 복잡한 NSView 하위 클래스를 갖고 싶습니다.보기 기반 NSTableView에서 선택된보기 변경

예는 방법의 상황이 여기에와 같이 편집중인 당신이 항목을 확장 할 수 있습니다 : http://culturedcode.com/things/

답변

1

당신이 이상보기를 변경 "에 의해 무엇을 의미하는지에 조금 더 정교 경우가 좋은 수 있습니다 복잡한보기 "

예를 들어 - (void)tableViewSelectionDidChange:(NSNotification *)notification을 테이블보기의 위임에 구현하고 표시되는 경우 NSTableRowView을 선택하고 원하는대로 변경할 수 있습니다. 그것 (아래 참조) 등

m 행의 크기를 줄이려면 동일한 위임에 - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row을 구현하고 테이블 뷰의 -noteHeightOfRowsWithIndexesChanged을 호출하여 특정 행의 높이를 업데이트해야합니다.

3

내 생각 엔 행을 선택할 때 다른 NSTableCellView 하위 클래스를 사용하려는 것입니다. 난 당신이 이런 일을 할 수 있어야한다고 생각 :

- (void)tableViewSelectionDidChange:(NSNotification *)notification 
{ 
    NSTableView *table = [notification object]; 
    NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[table tableColumns] count])]; 
    [table reloadDataForRowIndexes:[table selectedRowIndexes] columnIndexes:allColumns]; 
} 

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    if ([[tableView selectedRowIndexes] containsIndex:row]) 
    { 
     // If the row is selected, return an instance of the class for selected views 
     SelectedTableCellView *selectedView = ...; // Get from makeViewWithIdentifier: 
     // Set up selectedView 
     return selectedView; 
    } 
    else 
    { 
     NonSelectedTableCellView *nonSelectedView = ...; // Get from makeViewWithIdentifier: 
     // Set up nonSelectedView 
     return nonSelectedView; 
    } 
} 
+0

NSTableView가 Cocoa Bindings로 구현되는 경우이 방법이 효과가 있습니까? – Kaunteya

0

I 앱은 쉽게 선택한 행을 확장 할 수 있습니다 outlineview에서 NSOutlineView에 의해 생성된다 생각 ...

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item 
{   


    if ([item isKindOfClass:[NSDictionary class]]) 
    { 
     return YES;   
    }else 
    { 
     return NO; 
    } 
} 

나는이 생각 방법은 쓰기입니다.

관련 문제