2009-08-03 6 views
0

Ich habe eine NSTableView an Core Data angeschlossen. Hier ist was ich machen möchte.NSTableView Switch Spalte

Die Tabelle hat zwei Spalten. Wenn ich mit der Bearbeitung der ersten Spalte fertig bin und auf die Tabulatortaste klicke, um zur nächsten Spalte zu gelangen, möchte ich die zweite Spalte anhand der Daten der ersten Spalte programmatisch füllen. Gibt es eine Delegate-Methode, die mir dabei helfen kann?

Danke

Antwort

1

So funktioniert eine Tabellenansicht nicht. Jede Zeile ist ein Element und die Spalten sind unterschiedliche Eigenschaften dieses Elements. Der Versuch, etwas anderes zu tun, bekämpft den Rahmen und die HIG.

Vielleicht möchten Sie stattdessen einen NSBrowser.

+0

Huh? Ich bin nicht sicher, ob das Sinn macht? – Jacob

+0

Es tut es. Jede Zeile in einer Tabellenansicht zeigt ein Element an. Der Fragesteller möchte in jeder Spalte verschiedene Listen anzeigen, die in jeder Zeile mehrere unterschiedliche Elemente enthalten (im Gegensatz zu den Eigenschaften eines einzelnen Elements). Die Ansicht zum Anzeigen mehrerer Listen in separaten Spalten ist ein NSBrowser, kein NSTableView. –

0

Ja, es ist nicht allzu schwer, wenn man erst einmal versteht, wie die Apple Frameworks funktionieren.

Sie müssen einfach Ihr Controller-Objekt (das sich hinter der Tabelle befindet) zu einem "Delegaten" werden, der in dem Textfeld im ersten Textfeld nach Ereignisereignissen sucht.

Wenn Ihr Controller eine Nachricht erhält, dass ein Benutzer das erste Textfeld verlassen hat, können diese Daten aus dem ersten Textfeld gelesen und an das Modellobjekt (das alle Ihre Daten speichert) übergeben werden.

Ihr Modell Objekt würde wissen, wie zu aktualisieren, was im zweiten Feld sein sollte und eine Nachricht zurück an Ihren Controller sendet, dass die zweite Spalte geändert hat und

(Wenn diese aktualisiert werden muss ist verwirrend Sie bis lesen müssen Äpfel Dokumente auf MVC (Model View Controller).)

+0

Sie gehen davon aus, dass in der zweiten Spalte immer noch die gleiche Anzahl von Elementen wie in der ersten Spalte angezeigt wird. Sie gehen auch davon aus, dass die "Modellobjekte" irgendwie mehrere Elemente repräsentieren und dass jedes, das ein Element für die erste Spalte darstellt, weiß, welches Element es in der zweiten Spalte sein soll. Der Controller könnte den letzten Teil arrangieren, aber es ist immer noch ein gewaltiger Hack, der das Framework und die HIG bekämpft. –

+0

Peter, ich glaube immer noch nicht, dass du verstehst was ich versuche zu tun. Stellen Sie sich eine Tabelle mit zwei Spalten vor. Sagen wir, ich möchte, dass der Benutzer eine Nummer in die erste Spalte eingibt, und dann wird die zweite Spalte mit der ersten Zahl multipliziert mit zwei gefüllt. Beide Spalten jeder Zeile sind miteinander verknüpft und werden als eine zentrale Dateneinheit hinzugefügt. Jetzt konnte ich keine gute Delegate-Methode finden, die mir sagen würde, wenn das Feld geschaltet wird. Aber ich denke, ich muss wissen, wann sich [tableView selectedCell] ändert. Ich weiß nicht viel darüber, wie das Beobachten funktioniert - können Sie einen solchen Wert von einem IB-Objekt beobachten? –