2012-04-09 5 views
2

Wie ändere ich die Ansicht für die ausgewählte Zeile bei Verwendung einer view-basierten NSTableView? Insbesondere möchte ich eine einfache NSView-Unterklasse für nicht ausgewählte Zeilen und eine komplexere NSView-Unterklasse für die ausgewählte Zeile haben, die die Bearbeitung von mehr Informationen ermöglicht, die mit dem Zeilenelement verknüpft sind.Ändern der Ansicht für ausgewählte Ansicht in NSTableView

Ein Beispiel dafür ist die Art und Weise Dinge, die Sie das Element erweitern können wie hier zu sehen in Bearbeitung: http://culturedcode.com/things/

Antwort

1

Es wäre schön, wenn Sie ein wenig mehr auf ausgearbeitet, was meinen Sie mit „die Ansicht auf eine mehr ändern komplexe Ansicht "

Nichtsdestoweniger könnten Sie zum Beispiel implementieren - (void)tableViewSelectionDidChange:(NSNotification *)notification im Delegaten der Tabellenansicht, erhalten Sie die ausgewählte NSTableRowView, wenn es sichtbar ist, und ändern Sie es auf was Sie wollen, was es komplexer macht, erweitern es (siehe unten) usw.

zu m Wenn Sie die Größe einer Zeile ändern möchten, müssen Sie - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row im selben Delegaten implementieren und die Tabelle -noteHeightOfRowsWithIndexesChanged aufrufen, um die Höhe für bestimmte Zeilen zu aktualisieren.

3

Meine Vermutung ist, dass Sie eine andere NSTableCellView-Unterklasse verwenden möchten, wenn die Zeile ausgewählt ist. Ich denke, man sollte so etwas wie diese in der Lage sein zu tun:

- (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

Wird dies funktionieren, wenn NSTableView mit Cocoa Bindings implementiert ist? – Kaunteya

0

Ich denke, die App von NSOutlineView in outlineview erstellt wird, nur können Sie Ihre ausgewählte Zeile erweitern ...

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


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

Ich denke, das Weg ist schreiben ..

Verwandte Themen