2017-07-20 3 views
0

Ich habe zwei Tabellenansichten, von denen Tableview1 seine Daten von NSArrayController bekommt. Tableview2 bekommt Es ist Daten von Tableview Delegaten wie folgt aus:Wie verhindert man, dass NSTableView die Delegate-Funktion aufruft?

func tableView(_ tableview2: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 

     if tableview2 == self.tableview2 { 

      if let cellView = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as? NSTableCellView { 
       let numbers = array[row] 
       if tableColumn?.identifier == "cell" { 
        cellView.textField?.stringValue = "\(numbers.number)" 

        return cellView 
       } 
      } 
     } 
     return nil 
} 

Wenn ich die Daten aus tabeleview1 neu zu laden, die über Tableview-Funktion wird aufgerufen und gibt nil zurück. TableView1 ist also immer leer. Ich könnte natürlich die Delegiertenstelle von tableview1 löschen, aber ich brauche sie für tableViewSelectionDidChange() Funktion.

+1

Was genau möchten Sie tun? Wenn Sie TableView1 erneut laden, wird ViewForTableColumn aufgerufen. Wenn Sie das nicht möchten, rufen Sie reloadData nicht in tableView1 auf. Wenn Sie nil zurückgeben, wie wird Ihr Tableview1 auf dem Bildschirm gerendert? – adev

+0

@adev Ich rufe nicht reloadData auf TableView1. Tableview1 ist über NSArrayController an ein Array [NSObejct] gebunden. Wenn ich das Array aktualisiere, zeigt tableview1 leere Zeilen an. Die Anzahl der Zeilen in TableView1 entspricht der Anzahl der Elemente im Array. Außerdem gibt es die richtigen Werte in Tabelle 1 (ich kann es in der Konsole sehen). Tableview1 wird also mit der richtigen Anzahl von Zeilen und sogar mit den richtigen Werten gefüllt. Die Zellen in der Tabellenansicht sind jedoch visuell leer. –

+1

Warum stellen Sie die gleiche Frage wiederholt? Sie haben vor genau 20 Stunden dieselbe Frage gestellt. –

Antwort

0

Gibt eine Zellenansicht für jede Tabellenansicht zurück. Legen Sie die Werte der Steuerelemente der Tabellenansicht 2 fest.

func tableView(_ tableview2: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 
    if let cellView = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as? NSTableCellView { 
     if tableview2 == self.tableview2 { 
      if tableColumn?.identifier == "cell" { 
       let numbers = array[row] 
       cellView.textField?.stringValue = "\(numbers.number)" 
      } 
     return cellView 
    } 
    return nil 
} 
+0

Die Logik dieser Lösung kann nicht geleugnet werden. Auch ich wäre nie dazu gekommen. Das hat mir sehr geholfen. Vielen Dank! –

Verwandte Themen