In einer Mac OS X Cocoa-Anwendung habe ich ein anwendungs-modales Dialogfeld mit Textfeldern, die an den gemeinsamen Benutzer-Defaults-Controller gebunden sind. Wenn ich ein Textfeld bearbeite und dann wegklicke, bevor ich auf OK klicke, funktioniert alles wie gewünscht. Wenn ich jedoch anfange, ein Feld zu bearbeiten, und dann die Return-Taste drücke, um OK auszulösen, bleibt der alte Wert des Feldes in NSUserDefaults.Erzwingen des Lesens eines Textfeldes vor dem Beenden des Modal-Dialogs in Cocoa
Also, wie kann ich das geänderte Feld zwingen, den gebundenen Wert zu beeinflussen, wenn die Bearbeitung "unvollständig" ist?
Aus der Durchsicht der Dokumentation, ich denke, ich könnte NSControl validateEditing-Methode für jedes der Textfelder vor dem Schließen des Dialogfelds aufrufen, aber es scheint wie es sollte ein einfacher Weg sein.
FWIW, hier ist der Code, der den Dialog zeigt:
- (void)showDialog {
[NSApp activateIgnoringOtherApps:YES];
[NSApp beginSheet:startTimerDialog
modalForWindow:nil
modalDelegate:nil
didEndSelector:nil
contextInfo:nil];
[NSApp runModalForWindow:startTimerDialog];
[NSApp endSheet:startTimerDialog];
[startTimerDialog orderOut:self];
}
Die OK-Taste (eigentlich den Titel "Start") zu dieser Methode abgezielt wird:
- (IBAction)startTimerDialogStartButtonWasClicked:(id)sender {
[self closeModalDialog:sender];
// Then, call methods that read values from NSUserDefaults
// ...
}
Erhält der Delegierte eine Benachrichtigung in dem Fall, den ich versuche zu behandeln? –