NSTableView - Hin- und Herschalten zwischen zwei Datenquellen
-
19-09-2019 - |
Frage
Ich habe einen kleinen Kakao app, und die Benutzeroberfläche besteht im Wesentlichen aus einem einzigen NSTableView. Allerdings habe ich zwei verschiedene Listen von Daten, dass ich in sie angezeigt werden möchte, und dann nur Umschalten zwischen den beiden. Meine Frage ist, was denken Sie ist der beste Weg, um diese zu implementieren?
Nun überleg ich, dass ich einen BOOL-Flag auf Änderung verwenden könnte, die Array in der Datenquelle Methoden verwendet wird. Aber ich müsste auch die NSCell Klasse ändern, die verwendet wird, da die Listen vollständig unterschiedliche Datenobjekte enthalten. Dann würde ich brauche die Tabelle (würde [Tabelle reload] Reload all dies zuverlässig?) Neu zu laden.
Oder ich 2 separaten NSTableViews in meiner NIB-Datei erstellen könnte und Knebel ihre Sichtbarkeit ... Aber das scheint hackish.
Ich habe eine ziemlich gut von Cocoa zu verstehen, aber ich bin nicht wirklich sicher, wie für so etwas zu suchen, und ich bin gespannt, wie andere erfahrene Entwickler dieses Problem lösen würden.
Danke.
Lösung
Oder ich 2 separaten NSTableViews in meiner NIB-Datei erstellen könnte und Knebel ihre Sichtbarkeit ... Aber das scheint hackish.
Es ist nicht überhaupt hackish. Es ist hackish die gleiche Tabellenansicht für mehrere Sätze von unterschiedlichen Daten zu verwenden.
Nur eine Tabless NSTabView
mit zwei Registerkarten erstellen, legte eine NSTableView
in den ersten Registerkarte und anderen NSTableView
in dem zweiten Registerkarte. Sie können dann zwischen dem Tabellenansichten wechseln, indem -selectTabViewItemAtIndex:
auf der NSTabView
aufrufen.
Andere Tipps
Warum nicht getrennte Implementierungen von UITableViewDataSource
und UITableViewDelegate
und ändern, die diejenigen, die UITableView
Punkte zu, wenn das Toggle-Ereignis eintritt? Scheint, wie es viel sauberer als wenn alle, dass bedingten Code in einer Implementierung sein würde. Nur weil die meisten Beispiele der UITableViewController
Umsetzung dieser beiden Protokolle zeigen, bedeutet nicht, dass sie nicht drei separate Objekte sein können.
Sixten Ottos Antwort ist die richtige. Das heißt, wenn ich nur hacken zusammen etwas wollte, das funktioniert, ich so etwas tun könnte:
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (dataSourceOne) {
[self cellForRowAtIndexPathDS1:indexPath];
}
else {
[self cellForRowAtIndexPathDS2:indexPath];
}
}
und implementieren dann zwei Versionen von cellForRowAtIndexPath. Ich bin mir ziemlich sicher, dass die Nachladedaten Methode wird alles auf dem Bildschirm neu zu laden.
hackish, aber praktikabel ist.