Hinzufügen / Entfernen von Zeilen zu / von NSTableView in Objective-C
-
19-09-2019 - |
Frage
Ich mache eine einfache Todo-Anwendung in Cocoa. Ich habe eine Klasse (und ein NSObject zum XIB) MATodoController hinzugefügt:
MATodoController.h
#import <Cocoa/Cocoa.h>
@interface MATodoController : NSObject
{
IBOutlet NSTableView *table;
}
- (IBAction)addItem:(id)sender;
- (IBAction)removeItem:(id)sender;
@end
MATodoController.m
#import "MATodoController.h"
@implementation MATodoController
- (void)addItem:(id)sender
{
}
- (void)removeItem:(id)sender
{
}
@end
Ich habe einen Ausgang ‚Tisch‘ zu einem NSTableView und zwei Aktionen ‚addItem‘ und ‚removeItem‘ genannt durch Tastenklicks.
Gibt es eine Möglichkeit (natürlich gibt es einen Weg) Wie kann ich neue Zeilen hinzufügen / entfernen ausgewählten Zeilen zu und von einem NSTableView (Benutzer können mehrere Zeilen gleichzeitig auswählen)?
Vielen Dank im Voraus.
Oh, eines noch:. Die NSTableView hat nur eine Spalte (die von Kontrollkästchen besteht)
Lösung
In Cocoa, Sie fügen Sie nicht wirklich / entfernen Zeilen in eine NSTableView direkt. In Ihrem Controller, können Sie das NSTableDataSource Protokoll verabschieden, die zwei wichtige Methoden, die Sie zu implementieren, um benötigen hat diese Funktion zu erhalten:
- (int) numberOfRowsInTableView:(NSTableView *)aTableView
- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
Diese Methoden werden auf Nachrichten reagieren die Tabellenansicht, um es sendet die Datenquelle (konfigurierte im Interface Builder), um die Tabelle mit Zeilen von Daten zu füllen. In diesen Verfahren Implementierungen haben Sie die Informationen zurück, dass das Verfahren erfordert (die Anzahl der Zeilen, um den Wert einer Zelle in einer bestimmten Zeile). Durch, was Datenspeicher abzufragen haben Sie gearbeitet
Ihre addItem
und removeItem
Methoden werden auch Zeilendaten müssen zum Speichern / Löschen (in welcher Darstellung Sie haben ausgedacht). Sie könnten eine neue Klasse erstellen, die jede Zeile und speichern sie in einer NSMutableDictionary zum Beispiel darstellt.
Neben Apples docs, hier ist ein für diese Aufgabe.
Viel Glück!
Andere Tipps
Mit Kakao, der einfachste Weg, dies zu tun ist, mit Bindungen. Erstellen Sie ein NSArrayController
, verbunden mit einer Instanz von NSMutableArray
, und binden das NSArrayController
zum NSTableView
.
CocoaDev gibt einen guten Überblick über das Verfahren . Sie können auch Apples Dokumentation und CocoaDev ausgezeichnete Artikel auf Bindungen.