So setzen Sie SetEnabled: Für NSButton in einem NstableView
-
13-10-2019 - |
Frage
Hallo alles, ich habe ein NstableView mit drei Spalten. Das erste ist ein Kontrollkästchen und das dritte ist eine Taste. Die Schaltfläche "aktiviert" ist davon abhängig, ob das Kontrollkästchen aktiviert ist oder nicht.
Ich setze den Tabelleninhalt in der awakeFromNib
Methode und ich implementiere den Kontrollkästchen -Status in der - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
Methode. Ich muss einen Weg finden setEnabled:
für die NSButton
Vielen Dank
Keine korrekte Lösung
Andere Tipps
Eine gute Möglichkeit, die Schaltflächenzustände in einem NstableView festzulegen, besteht darin, einen NsarrayController zu verwenden und an die Spalten des NstableView zu binden:
- Binden Sie die Spalte, die die Schaltflächen enthält, an den NsarrayController (siehe Dieses Beispiel)
- Unter Ermöglicht
- Setzen Sie die
Controller Key
zu arrangedObjects - Setzen Sie die
Model Key Path
zum NSArrayController -Button -Status. Nennen wir es zum Beispiel aktiviert .
- Setzen Sie die
Jetzt in der Klasse, in der Sie den NSArrayController und den NStableView -Delegierter haben, machen Sie so etwas, nachdem Sie auf ein Kontrollkästchen geklickt haben:
- (void)updateArrayControllerWithButtonState: (BOOL)isEnabled
{
// theTable is the NSTableView instance variable
NSInteger row = [theTable clickedRow];
// Get the array of values that populates the table
NSMutableDictionary *arrayValues = [[theArrayController arrangedObjects] objectAtIndex:row];
// Actually change the NSArrayController's value to match
[arrayValues setObject:[NSNumber numberWithBool:[model isEnabled]] forKey:@"enabled"];
[theTable reloadData];
}
Vorausgesetzt, Sie haben Ihre Bindungen für den NSArrayController & nstableView ordnungsgemäß eingerichtet, sollte diese Funktion den aktuellen Status der Schaltfläche aktualisieren, um der des NSArrayController zu entsprechen.
Dieser Kodex ist ungetestet, sollte aber die allgemeine Idee beleuchten.