2012-10-11 12 views
6

Ich habe eine NSTableView von Inhaltstyp View Based mit zwei Spalten.Wie erhalten Elemente innerhalb einer ausgewählten Zeile in einem NSTableView?

Meine Objekte sind wie folgt strukturiert:

Table View 
    Table Column 
     Table Cell View 
      Text Field 
    Table Column 
     Table Cell View 
      Popup Button 

Für eine ausgewählte Reihe, ich ein Element innerhalb der ausgewählten Zeile für eine bestimmte Spalte erhalten möchten. Insbesondere möchte ich die Text Field in der ersten Spalte für die ausgewählte Zeile abrufen.

Ich habe einen Auslass der Tabellenansicht, und ich habe den Index der ausgewählten Zeile so weit, aber das war es:

- (void)getSelectedTextField 
{ 
    NSInteger selected = [tableView selectedRow]; 
} 

Alle Ideen, wie ich über die Bekämpfung dieses Problems gehen kann?

Bearbeiten: Das ist, was ich versuche zu tun: Ich möchte das Textfeld in einen Bearbeitungszustand ändern und darauf konzentrieren, so dass der Benutzer die Textfeldwert bearbeiten kann, sobald es ausgewählt ist

+1

Auf welche Elemente müssen Sie zugreifen? Wenn Sie nur die Daten abrufen müssen, sollten Sie sie in einer NSTableViewDataSource speichern und dann diese Datenquelle an NSTableView übergeben. –

+0

@NathanVillaescusa: Es ist eine der Kontrollen zu ändern. Insbesondere möchte ich das Textfeld so ändern, dass es sich in einem Bearbeitungszustand befindet, und darauf fokussieren, sodass der Benutzer mit der Bearbeitung des Textfeldwerts beginnen kann, sobald dieser ausgewählt ist. –

Antwort

18

ich schien mein eigenes Problem gelöst zu haben:

- (void)getSelectedTextField 
{ 
    NSInteger selected = [tableView selectedRow]; 

    // Get row at specified index 
    NSTableCellView *selectedRow = [tableView viewAtColumn:0 row:selected makeIfNecessary:YES]; 

    // Get row's text field 
    NSTextField *selectedRowTextField = [selectedRow textField]; 

    // Focus on text field to make it auto-editable 
    [[self window] makeFirstResponder:selectedRowTextField]; 

    // Set the keyboard carat to the beginning of the text field 
    [[selectedRowTextField currentEditor] setSelectedRange:NSMakeRange(0, 0)]; 
} 
+1

Sir, können Sie mir bitte helfen, ein ausgewähltes Element einer Combobox, die ich in einer der Spalte anstelle von Textfeld hinzugefügt. Jede Hilfe ist großartig – Abin

0

Wenn das Textfeld das einzige subview Ihrer Tabelle Ansicht Zelle ist, können Sie einen Verweis auf sie mit dem folgenden Code zu bekommen, und der Text wählen, es ist so bereit für die Bearbeitung:

-(void)tableViewSelectionDidChange:(NSNotification *)notification { 
    NSInteger row = [notification.object selectedRow]; 
    NSTextField *tf = [[[notification.object viewAtColumn:0 row:row makeIfNecessary:NO]subviews] lastObject]; 
    [tf selectText:tf.stringValue]; 
} 
3

Verwendung kann alle Elemente der Tabellenansichtszelle abrufen, indem sie ihre Unteransicht abrufen. Schlagen Sie das Protokoll vor der Verwendung vor der Verwendung an

NSInteger index = [self.tableViewFiles selectedRow]; 

// Get row at specified index of column 0 (We just have 1 column) 
NSTableCellView *cellView = [self.tableViewFiles viewAtColumn:0 row:index makeIfNecessary:YES]; 

// Get row's checkBox (at index 0, textFields is 1,2) 
NSButton *checkBox = [[cellView subviews] objectAtIndex:0]; 
Verwandte Themen