В приложении Mac OS X Cocoa у меня есть модальное диалоговое окно приложения с текстовыми полями, которые привязаны к Shared User Defaults Controller. Если я отредактирую текстовое поле, а затем уберу из него вкладку, прежде чем нажать кнопку ОК, все будет работать так, как нужно. Однако, если я начинаю редактировать поле, а затем нажимаю клавишу Return, чтобы вызвать OK, старое значение поля остается в NSUserDefaults.
Итак, как я могу заставить измененное поле влиять на связанное значение, когда редактирование "не завершено"?
Из прочтения документации, я думаю, я мог бы вызвать метод validateEditing NSControl для каждого из текстовых полей, прежде чем закрыть диалоговое окно, но кажется, что должен быть более простой способ.
FWIW, вот код, который отображает диалоговое окно:
- (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];
}
Кнопка OK (фактически называется «Старт») предназначена для этого метода:
- (IBAction)startTimerDialogStartButtonWasClicked:(id)sender {
[self closeModalDialog:sender];
// Then, call methods that read values from NSUserDefaults
// ...
}